你能这样做吗?
[DataContract]
public class RegisterEndpointRequest : NotificationRegistrationServiceRequest
{
[DataMember]
public IEndpoint Endpoint { get; set; }
}
请注意,成员Endpoint是一个接口(IEndpoint
),而不是一个类。 WCF会允许吗?
答案 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; }