5

私は次のように契約しています。

[DataContract]
public class MyObj
{
    [DataMember(IsRequired=true)]
    public string StrA {get; private set;}

    [DataMember(IsRequired=false)]
    public string StrB {get; private set;}
}

とはIsRequiredどういう意味ですか? IsRequired=falseのインスタンスMyObjをunitializedを使用して渡すことができるということですか、それとも、インスタンスを使用せずにワイヤーを介してStrB渡すことができるということですか?MyObjStrB

MyObj後者の場合、実際にどのようにインスタンス化して +なしのインスタンスに送信しますStrBか?

4

2 に答える 2

3

DataMemberの IsRequired は、基になる XML で StrB の値を提示する必要があるかどうかをシリアル化エンジンに通知します。

したがって、ネットワーク経由で取得でき<MyObj></MyObj>、MyObj インスタンスに逆シリアル化されます。

編集: StrB が存在しないと、実際に MyObj のインスタンスを初期化することはできません。これの用途は、互換性と拡張性です。たとえば、クライアントに更新された MyObj バージョンがなく、StrB が存在しない可能性があります。この場合、サーバー コードは StrB を不要としてマークすることができ、サーバー側でメッセージを受信したときにシリアライゼーション例外は発生しません。

于 2009-10-14T14:53:53.147 に答える
2

StrB なしで MyObj のインスタンスを実際にインスタンス化して送信するにはどうすればよいですか?

先ほどWCF と匿名型で述べたように、[DataMember(EmitDefaultValue=false)] を使用できます。これにより、データ メンバーが既定値 (文字列の場合は null など) の場合、データ メンバーは出力されません。

于 2009-10-14T16:11:59.660 に答える