列表项的条件XML序列化
问题描述:
我想知道是否可以有条件地排除列表中的项目使用ShouldSerialize*
模式进行序列化。例如采取两类:列表项的条件XML序列化
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;}
}
我可以去只有.Selected = true
序列化的ProductStyles
属性中的项目?这是否可以使用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>
的解释,见here。)
使列表成为私人的,然后创建一个公共属性过滤返回结果之前的列表。 – jdweng