gpt4 book ai didi

c# 序列化嵌套类

转载 作者:太空宇宙 更新时间:2023-11-03 21:41:36 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com