5

你能做这个吗?

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

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

4

3 回答 3

8

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

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

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

于 2012-08-03T17:02:01.543 回答
3

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

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

于 2012-08-03T16:55:24.867 回答
1

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

 [DataContract]
    [KnownType(typeof(ActivityDC))]
    [KnownType(typeof(StepDC))]
    [KnownType(typeof(WaveDC))]
    public class CampaignDC : AuditedEntityBaseDC
    {
        [DataMember]
        public IList<IActivityDC> Activities { get; set; }
于 2015-09-24T06:48:32.757 回答