1

以下に定義されているデータコントラクトがあります。

[DataContract(Namespace="",Name="community")]
public class Community {

    [DataMember(Name="id")]
    public int Id{get; set;}

    [DataMember(Name="name")]
    public string Name { get; set; }

    [DataMember(Name="description")]
    public string Description { get; set; }
}

サービス契約は次のようになります。

[OperationContract]
   [WebGet(
                BodyStyle = WebMessageBodyStyle.Bare,
                ResponseFormat = WebMessageFormat.Xml, 
                UriTemplate = "{id}"
 )]
   Community GetCommunity(string id);

ホストに残りの呼び出しを行うと、データが取得されますが、Id プロパティと Name プロパティのみが入力されます。説明プロパティが null です! ClientBase から継承してチャネルを作成しています。

WCF が Id と Name をシリアル化するのに Description をシリアル化しない理由を知っている人はいますか? ホストからの応答で転送エンコーディングが「チャンク」に設定されていますが、それが何か関係があるかどうか知りたいですか?

4

1 に答える 1

2

応答 xml の要素の順序が異なるため、一部のプロパティがシリアル化されていないことがわかりました。解決策は、datacontract でシリアル化の順序を明示的に設定することでした。order 属性を追加した後の datacontract は次のとおりです。

 [DataContract(Namespace="",Name="community")]
public class Community 
{
    [DataMember(Name = "name",Order=2)]
    public string Name { get; set; }

    [DataMember(Name="id",Order = 1)]
    public int Id{get; set;}

    [DataMember(Name="description",Order=3)]
    public string Description { get; set; }
}
于 2009-11-11T23:55:54.283 に答える