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 属性。描述属性为空!我通过从 ClientBase 继承来创建频道。

有谁知道为什么 WCF 序列化 Id 和 Name 而不是 Description?在主机的响应中,传输编码设置为“分块”,我想知道这是否与它有关?

4

1 回答 1

2

我发现某些属性没有被序列化,因为响应 xml 的元素顺序不同。解决方案是在数据合同上明确设置序列化顺序。这是我添加订单属性后的数据合同:

 [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 回答