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 に答える