1

私はいくつかの DataContracts を定義しています。一方は他方から継承されています。これらは正確なクラスではありませんが、次のようなものがあります。

[DataContract]
public class BaseModel 
{
    [DataMember]
    public String Id {get;set;}
}

[DataContract]
public class MyModel : BaseModel 
{
    [DataMember]
    public String Name {get;set;}
}

サーバーからクライアントにデータを移動するために、basicHTTPbinding で WCF を使用しています。フィドラーを使用して送信されているデータを確認すると、少し奇妙なことが起こります。

返される生データで Name プロパティを調べると、「Name」の後にデータが続くことがわかります。Id プロパティについては、'Id http://schema.datacontract.org/2004/07/MyService ' の後にデータが続きます。基本クラスのフィールドの schema.datacontract.org 部分だけが表示されます。継承されたフィールドだけがそのスキーマ部分を取得するのはなぜですか? 両方のクラスが同じネームスペースにあります。応答にかなりのサイズが追加されるため、どのプロパティにも使用したくありません。とにかくオフにすることはできますか?

4

1 に答える 1

1

各 [DataContract] を変更して、同じ値の Namespace を含めました。

[DataContract(Namespace = "http://schemas.datacontract.org/2004/07/MyCode.Service")]

これで問題が解決しました。すでに同じ名前空間にあるため、指定する必要がある理由はわかりませんが、機能します。

于 2013-10-02T09:39:58.513 に答える