列表项的条件XML序列化

时间:2016-11-16 19:13:57

标签: c# .net serialization xml-serialization xmlserializer

我想知道是否可以有条件地排除列表中的项目使用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*模式

1 个答案:

答案 0 :(得分:1)

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。)