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>
也没有前缀了。搞定了,但是原因未明。。。待高人解答。