我有一个如下定义的数据合同:
[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属性。 Description属性为null!我通过继承ClientBase来创建频道。
有人知道为什么WCF序列化Id和Name而不是Description吗?传输编码在主机响应中设置为“Chunked”,我想知道这与它有什么关系吗?
答案 0 :(得分:2)
我发现有些属性没有被序列化,因为响应xml的元素顺序不同。解决方案是在datacontract上明确设置序列化顺序。这是我添加订单属性后的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; }
}