你能在WCF中将接口用作DataMembers吗

本文关键字:DataMembers 接口 WCF | 更新日期: 2024-09-19 21:20:05

你能做到吗?

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

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

你能在WCF中将接口用作DataMembers吗

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

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

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

WCF中的DataContractAttribute不用于接口:请参阅此处的文档

这个问题的答案可能会让你更好地了解原因。

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

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