我需要使用C#XmlSerializer对XML进行序列化和反序列化(或者有更好的方法吗?)。
[XmlElement]
public virtual List<Map> Maps { get; set; }
public class Map
{
[XmlAttribute("item")]
public string Item { get; set; }
[XmlAttribute("uri")]
public string Uri { get; set; }
}
Maps = new List<Map>{
new Map { Item="", Uri="" },
new Map { Item="something", Uri="foo" },
new Map { Item="", Uri="foo" },
}
序列化程序应丢弃带有string.IsNullOrEmpty(map.Item)的每个项目,以便生成的Xml仅保存带有“某物”的映射。 我如何才能毫不费力地实现这一目标?:
<Maps>
<Map item="something" uri="foo" />
</Maps>
答案 0 :(得分:0)
好吧,您可以尝试创建XmlWriter,该过滤器过滤掉所有带有xsi:nil属性或包含空字符串的元素,并将所有其他调用传递给基础标准XmlWriter,以“清理”序列化的XML。
答案 1 :(得分:0)
据我了解,您希望在序列化XML之前对其进行过滤。
我建议您使用LINQ
:
var filteredMaps = Maps.Where(map => !string.IsNullOrWhiteSpace(map.Item)).ToList();
请注意在行尾的.ToList()
调用。这很重要,因为我想您的XmlSerializer
类型为List<Map>
。在序列化对象之前放置此行,结果应如下所示:
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Map item="something" uri="foo" />
</ArrayOfMap>
别忘了using System.Linq;