我想在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列表,但有没有办法以声明方式执行此操作?
答案 0 :(得分:0)
编写自己的xml序列化程序。您可以使用IXmlSerializable接口 或者您可以编写自己的ToXml方法来输出字符串。有很多方法可以做到,但写自己的方法会给你你想要的东西。