对List的每个项进行条件序列化

时间:2009-12-24 13:27:50

标签: c# xml-serialization conditional

我想在List的每个项目上控制Xml序列化,假设你有这个:

public class Item { 
        [XmlElement("id")]
    public int Id { get; set; }
        [XmlElement("label")]
    public string Label { get; set; }

    #region Conditional serialization
        public bool ShouldSerializeLabel()
        {
            return !string.IsNullOrEmpty(Label);
        }
    #endregion
}

public class Root {
    [XmlArray("items")]
    [XmlArrayItem("item")]
    public List<Item> Items { get; set; }

    #region Conditional serialization
    // Suppose I have two items but one has no label, 
    // How to avoid this :
    // <items>
    //   <item>
    //     <id>5</id>
    //     <label>5</label>
    //   </item>
    //   <item> // I don't want items without label in my collection, how to tell the XmlSerializer not to serialize them
    //     <id>4</id>
    //   </item>
    // </items>
    //
    // But I still want to have to possibility to do that :
    // <product>
    //  <item> // this item has no label and it's ok
    //    <id>42</id>
    //  </item>
    //  <price>1.99</price>
    // </product>
    #endregion
}

如何使用string.IsNullOrEmpty(Label)判断一个Item 不应该在我的收藏中序列化?我的解决方法是在序列化之前清理Item列表,但有没有办法以声明方式执行此操作?

1 个答案:

答案 0 :(得分:0)

编写自己的xml序列化程序。您可以使用IXmlSerializable接口  或者您可以编写自己的ToXml方法来输出字符串。有很多方法可以做到,但写自己的方法会给你你想要的东西。