WCF的DataContractSerializer序列化List集合对象时生成的XML中节点带有前缀的问题

WCF的DataContractSerializer序列化List集合对象时生成的XML中节点带有前缀的问题:

类代码:

[DataContract(Namespace = "http://192.26.168.102:8080/result")]
    public class ProdPkgListResponse
    {
        [DataMember(Order = 1)]
        public string ResultCode { get; set; }
        [DataMember(Order = 2)]
        public string ResultDesc { get; set; }
        [DataMember(Order = 3)]
        public List<ProductPackage> Packages = new List<ProductPackage>();
    }

    public class ProductPackage
    {
        [DataMember(Order = 1)]
        public string ProdPkgId { get; set; }
        [DataMember(Order = 2)]
        public string ProdPkgName { get; set; }

   。。。。

 }

调用DataContractSerializer进行序列化,得到如下xml文件:

<ProdPkgListResponse xmlns="http://192.26.168.102:8080/result" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
 <ResultCode>0</ResultCode>
 <ResultDesc>success</ResultDesc>
 <Packages xmlns:a="http://schemas.datacontract.org/2004/07/S_Service">
      <a:ProductPackage>
          <a:Country>country</a:Country>
          <a:Price>price</a:Price>

           .......
      </a:ProductPackage>
      <a:ProductPackage>
      .......
      </a:ProductPackage>
 </Packages>
</ProdPkgListResponse>

生成的package的子节点都带有前缀,查了一下,好像说是未知类型,需要设置KnownTypeAttribute ,设置没成功,

偶然地在类代码中给:public class ProductPackage前面加上:[DataContract(Namespace = "http://192.26.168.102:8080/result")]

编译发布一下,居然可以了。生成的xml如下:

<ProdPkgListResponse xmlns="http://192.26.168.102:8080/result" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
 <ResultCode>0</ResultCode>
 <ResultDesc>success</ResultDesc>
 <Packages>
  <ProductPackage>
   <ProdPkgId>prodPkgId</ProdPkgId>
   <ProdPkgName>prodPkgName</ProdPkgName>
   <ProdPkgDesc>prodPkgDesc</ProdPkgDesc>
 </ProductPackage>
 </Packages>
</ProdPkgListResponse>

也没有前缀了。搞定了,但是原因未明。。。待高人解答。

posted @ 2012-08-23 16:02  Smith Liu  阅读(325)  评论(0编辑  收藏  举报