列表项的条件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*模式

列表项的条件XML序列化

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>的解释,请参阅此处。)