2010-03-10 3 views
4

Если i Serializable, используйте следующий код с помощью 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

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 –

Смежные вопросы