c# 序列化嵌套类

标签 c# xml serialization

我正在尝试序列化一个虚拟的订单集合,其中每个订单都包含一个产品。该集合序列化良好,但遗漏了订单中的示例产品属性。<​​/p>

订单收集

[XmlRoot("Orders")]
public class OrderCollection : ICollection<Order>
{
    private static List<Order> _orders;

    private List<Order> Orders
    {
        get
        {
            if(_orders == null)
            {
                _orders = new List<Order>();
            }

            return _orders;
        }
    }

    //All the ICollection functions
}

订单

public class Order
{
    [XmlElement("Id")]
    public int Id
    {
        get;
        set;
    }

    [XmlElement("Title")]
    public string Title
    {
        get;
        set;
    }

    [XmlElement("IsReserved")]
    public bool IsReserved
    {
        get;
        set;
    }

    [XmlElement("Count")]
    public int Count
    {
        get
        {
            return this.Products.Count;
        }
        set
        {

        }
    }

    // not serializing
    [XmlElement("Product")]
    public Product ProductTest
    {
        get
        {
            return new Product();
        }
    }

    // not serializing
    [XmlArray("Products")]
    public ICollection<Product> Products
    {
        get
        {
            return this._products;
        }

    }

    private List<Product> _products;

    public Order()
    {
        var rand = new Random();
        var count = rand.Next(1, 5);
        this._products = new List<Product>();

        for (int i = 0; i < count; i++)
        {
            this._products.Add(new Product());
        }
    }
}

产品

[Serializable]
public class Product 
{
    [XmlElement("Id")]
    public int Id
    {
        get;
        set;
    }

    [XmlElement("Title")]
    public string Title
    {
        get;
        set;
    }

    public Product()
    {
        var rand = new Random();
        this.Id = rand.Next(100, 9999);
        this.Title = "Product " + this.Id;
    }
}

输出

<?xml version="1.0"?>
<Orders xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Order>
    <Id>619883</Id>
    <Title>Order 619883</Title>
    <IsReserved>false</IsReserved>
    <Count>3</Count>
  </Order>
  <Order>
    <Id>961448</Id>
    <Title>Order 961448</Title>
    <IsReserved>false</IsReserved>
    <Count>3</Count>
  </Order>
  <Order>
    <Id>483677</Id>
    <Title>Order 483677</Title>
    <IsReserved>false</IsReserved>
    <Count>2</Count>
  </Order>
  <Order>
    <Id>512026</Id>
    <Title>Order 512026</Title>
    <IsReserved>false</IsReserved>
    <Count>2</Count>
  </Order>
  <Order>
    <Id>916029</Id>
    <Title>Order 916029</Title>
    <IsReserved>false</IsReserved>
    <Count>4</Count>
  </Order>
  <Order>
    <Id>109800</Id>
    <Title>Order 109800</Title>
    <IsReserved>false</IsReserved>
    <Count>4</Count>
  </Order>
</Orders>

我完全不知所措。深度序列化似乎有效,因为否则订单不会在 OrderCollection 中序列化,但随后它就停止了。有什么建议吗?

最佳答案

您必须将 ICollection 更改为 List。接口(interface)不可序列化。

[XmlArray("Products")]
public List<Product> Products
{
    get
    {
        return this._products;
    }

}

ProductTest 因缺少 setter 而无法运行

关于c# 序列化嵌套类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19049964/

相关文章:

ios - NSXMLParser 获取属性的命名空间前缀

c# - .net DateTime 序列化反序列化 bug

c# - 序列化包含字典成员的类

asp.net-mvc-3 - 序列化时忽略属性

c# - 将 XML 消息反序列化为对象

c# - 如何从图像中获取前 5 种最常用的 RGB 颜色?

c# - F#/.NET 空实例异常

c# - 每个 parent 只选择 1 个 child

java - Web服务输出多种格式

java - Freemarker解析异常: "Unknown directive: #outputformat"