将空XML元素渲染为父元素

我有一个奇怪的要求,即我的应用程序生成的消耗一些XML的应用程序实际上需要将空元素序列化为父元素。 例如:

 

应该:

  

我不知道XmlSerializer允许你改变它的任何方式。 有谁知道如何做到这一点?

我扩展了XmlTextWriter,以便我可以覆盖WriteEndElement()方法,强制它调用WriteFullEndElement()。 这样做了。

注意:对于任何看到我的问题更新的人,请忽略。 IE以简写forms呈现XML。 当我在记事本中打开它时,我意识到一切正常。

 public class FullEndingXmlTextWriter : XmlTextWriter { public FullEndingXmlTextWriter(TextWriter w) : base(w) { } public FullEndingXmlTextWriter(Stream w, Encoding encoding) : base(w, encoding) { } public FullEndingXmlTextWriter(string fileName, Encoding encoding) : base(fileName, encoding) { } public override void WriteEndElement() { this.WriteFullEndElement(); } } 

您可以使用正则表达式解决它,使其成为两遍过程。

 string xml = "element foo=\"bar\" />" string pattern = @"<(?\w+)(?\b.*)/>"; string substitute = @"<${elem} ${body}>"; Regex regex = new Regex(pattern); string goodresult = regex.Replace(xml, substitute); 

Scott Hanselman写了一篇关于从XML中删除空元素的文章,并且一目了然,代码可以用于您的目的,只需对空元素的处理进行一些小改动。 他还解释了为什么使用RegEx是一个坏主意。

我指出这一点,因为我不知道如何让XmlSerializer做你想做的事。

另一种可能性,虽然我对WPF并不是很了解,但是使用XAML序列化程序 – 请查看System.Window.Markup命名空间文档。