2010-03-10 43 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