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

Pau*_*yer 4 c# wcf interface

你能做这个吗?

[DataContract]
public class RegisterEndpointRequest : NotificationRegistrationServiceRequest
{
    [DataMember]
    public IEndpoint Endpoint { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

Aas*_*set 6

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

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

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


chr*_*dam 3

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

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