代码之家  ›  专栏  ›  技术社区  ›  darthjit

WCF REST客户端和传输编码分块:是否支持?

  •  1
  • darthjit  · 技术社区  · 15 年前

    我有如下定义的数据合同:

    [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);
    

    当我对主机进行REST调用时,我会获取数据,但只填充ID和名称属性。说明属性为空!我是通过从clientbase继承来创建通道的。

    有人知道为什么wcf序列化id和name而不序列化description吗?在主机的响应上将传输编码设置为“chunked”,我想知道这是否与此有关?

    1 回复  |  直到 15 年前
        1
  •  2
  •   darthjit    15 年前

    我发现有些属性没有被序列化,因为响应XML的元素顺序不同。解决方案是显式设置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; }
    }