列表项的条件XML序列化
本文关键字:XML 序列化 条件 列表 | 更新日期: 2023-09-27 18:18:28
我想知道是否可以有条件地排除使用ShouldSerialize*
模式序列化的列表中的项。以两个类为例:
public class Product{
public int ID {get; set;}
public List<Styles> ProductSyles {get; set;}
}
public class Styles{
public int ID {get; set;}
public bool Selected {get; set;}
public string StyleName {get; set;}
}
我可以只序列化ProductStyles
属性中的项目与.Selected = true
吗?是否可以使用ShouldSerialize*
模式
XmlSerializer
没有在序列化过程中省略选定集合项的内置功能。实现这一点的最快方法是使用代理数组属性,如下所示:
public class Product
{
public int ID { get; set; }
[XmlIgnore]
public List<Styles> ProductSyles { get; set; }
[XmlArray("ProductStyles")]
public Styles [] SerializableProductSyles
{
get
{
if (ProductSyles == null)
return null;
return ProductSyles.Where(s => s.Selected).ToArray();
}
set
{
if (value == null)
return;
ProductSyles = ProductSyles ?? new List<Styles>();
ProductSyles.AddRange(value);
}
}
}
(关于为什么应该优先使用代理数组而不是代理数组List<Styles>
的解释,请参阅此处。)