【发布时间】:2019-06-24 03:15:19
【问题描述】:
我目前正在使用 XmlSerializer 类将某些数据写入 XML 文档,但是当特定字段不包含数据时,它当前正在将其写入如下:
<ElementA />
如果该字段不存在数据,是否可以完全不写出该元素?
谢谢
【问题讨论】:
标签: c# xml xml-serialization
我目前正在使用 XmlSerializer 类将某些数据写入 XML 文档,但是当特定字段不包含数据时,它当前正在将其写入如下:
<ElementA />
如果该字段不存在数据,是否可以完全不写出该元素?
谢谢
【问题讨论】:
标签: c# xml xml-serialization
看看ShouldSerilize 方法。
在您的课程中,您只需要实现bool ShouldSerilizeElementA() 方法,例如:
public bool ShouldSerilizeElementA() => ElementA != null;
【讨论】:
可能重复How do I tell xmlwriter to ignore empty nodes in C#?:
关于这种方法的详细描述是here。
短:使用正则表达式从结果字符串中删除空元素。
static Regex regex = new Regex(@"\<[\w-_.: ]*\>\<\!\[CDATA\[\]\]\>\</[\w-_.: ]*\>|\<[\w-_.: ]*\>\</[\w-_.: ]*\>|<[\w-_.: ]*/\>|\<[\w-_.: ]*[/]+\>|\<[\w-_.: ]*[\s]xmlns[:\w]*=""[\w-/_.: ]*""\>\</[\w-_.: ]*\>|<[\w-_.: ]*[\s]xmlns[:\w]*=""[\w-/_.: ]*""[\s]*/\>|\<[\w-_.: ]*[\s]xmlns[:\w]*=""[\w-/_.: ]*""\>\<\!\[CDATA\[\]\]\>\</[\w-_.: ]*\>",RegexOptions.Compiled);
这里用这种方式写自定义的XMLWriter/XMLReader类,不会省略空元素。
【讨论】: