【问题标题】:Rename serializable class重命名可序列化类
【发布时间】:2011-01-25 21:46:45
【问题描述】:

如果我使用 XmlSerializer 序列化以下代码。

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

我得到以下 xml

<ArrayOfProduct>
  <Product/>
</ArrayOfProduct>

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

<products>
  <product/>
</products>

【问题讨论】:

    标签: c# serializable xmlroot


    【解决方案1】:

    简单;不要从List&lt;T&gt;继承:

    [XmlRoot("products")]
    public class ProductWrapper
    {
        private List<Product> products = new List<Product>();
    
        [XmlElement("product")]
        public List<Product> Products { get {return products; } }
    }
    public class Product
    {
    }
    

    【讨论】:

    • 我同意提出的解决方案,但有趣的是为什么 [XmlRoot("products")] 在作者的代码中被忽略
    【解决方案2】:

    你是如何进行序列化的?我使用了以下代码:

    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>
    

    【讨论】:

    • 嗯.. 将[XmlType("product")] 添加到Product ftw ;-p
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多