你能在WCF中使用接口作为DataMembers吗?

时间:2012-08-03 16:48:37

标签: c# wcf interface

你能这样做吗?

[DataContract]
public class RegisterEndpointRequest : NotificationRegistrationServiceRequest
{
    [DataMember]
    public IEndpoint Endpoint { get; set; }
}

请注意,成员Endpoint是一个接口(IEndpoint),而不是一个类。 WCF会允许吗?

3 个答案:

答案 0 :(得分:6)

我认为你可以(但我还没有测试过),但是你需要用[KnownType]声明该接口的所有实现:

[DataContract]
[KnownType(typeof(EndpointImplA))]
[KnownType(typeof(EndpointImplB))]
public class RegisterEndpointRequest : NotificationRegistrationServiceRequest
{
    [DataMember]
    public IEndpoint Endpoint { get; set; }
}

每个实现类必须具有[DataContract]属性。

答案 1 :(得分:3)

WCF中的DataContractAttribute不适用于接口:See the documentation here

answer in this question可能会让您更好地了解原因。

答案 2 :(得分:0)

是的,当然您可以在DataContract中将接口作为DataMember。 然后,您必须在KnownType属性中指定所有接口实现 ...

 [DataContract]
    [KnownType(typeof(ActivityDC))]
    [KnownType(typeof(StepDC))]
    [KnownType(typeof(WaveDC))]
    public class CampaignDC : AuditedEntityBaseDC
    {
        [DataMember]
        public IList<IActivityDC> Activities { get; set; }