あなたはこれができますか?
[DataContract]
public class RegisterEndpointRequest : NotificationRegistrationServiceRequest
{
[DataMember]
public IEndpoint Endpoint { get; set; }
}
メンバーEndpointはIEndpoint
、クラスではなくインターフェース()であることに注意してください。WCFはこれを許可しますか?
私はあなたができると思います(しかし私はそれをテストしていません)、しかしあなたはそれからそのインターフェースのすべての実装を:で宣言する必要があります[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; }