2010-03-10 42 views
4

如果我使用XmlSerializer对以下代码进行序列化。重命名可串行化类

[XmlRoot("products")] 
public class Products : List<Product> 
{ 
} 
public class Product 
{ 
} 

我得到以下XML

<ArrayOfProduct> 
    <Product/> 
</ArrayOfProduct> 

如何我写来获取标签(产品和小写产品)的以下命名?

<products> 
    <product/> 
</products> 

回答

2

简单;不要继承自List<T>

[XmlRoot("products")] 
public class ProductWrapper 
{ 
    private List<Product> products = new List<Product>(); 

    [XmlElement("product")] 
    public List<Product> Products { get {return products; } } 
} 
public class Product 
{ 
} 
+0

我提出的解决方案达成一致,但有趣的是为什么[XmlRoot(“产品”)]在作者的代码 – Andrey 2010-03-10 13:35:39

1

你是如何做序列化?我用下面的代码:

Products products = new Products(); 
products.Add(new Product()); 

XmlSerializer serializer = new XmlSerializer(typeof(Products)); 

using (StringWriter sw = new StringWriter()) 
{ 
    serializer.Serialize(sw, products); 

    string serializedString = sw.ToString(); 
} 

,得到了这样的结果:

<?xml version="1.0" encoding="utf-16"?> 
<products xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Product /> 
</products> 
+0

被忽略嗯..将'[XmlType(“product”)]'添加到'Product' ftw ;-p – 2010-03-10 13:39:21