C#System.Xml.Serialization-仅使用<a> </a>而从不使用<a/>

Pet*_*pov 2 c# xml xml-serialization xmltextwriter xmlserializer

我的客户遇到一个奇怪的问题-我正在读取XML文档(实际上是InfoPath文档)XmlSerializer,进行修改,然后使用编写XML文档XmlSerializer,然后使用来添加一些处理指令XmlTextWriter。一切运行良好,并且生成的文档实际上完全符合XML,并且可以由InfoPath读取。但是,结构发生的变化是原始文档中所有空标签都以表格形式写入<A></A>,而在编写文档时,该文档变为<A/>。由于XML标准,实际上完全相同。但是,我的客户(一家大公司)显然具有一些带有hardcoded的检查/验证脚本<A></A>,但是它们失败了。他现在很沮丧,并且懒得更改脚本,并且想要这种<A></A>符号!我该如何设定XmlTextWriter 去做吧?

Ond*_*cny 5

您可以通过提供XmlSerializer自己的XmlWriter后代来实现,这将覆盖WriteEndElementmethod。默认情况下,此方法根据要输出的元素的内容生成一个空元素(<a />)或一个结束元素(</a>)。您可以更改行为以始终产生完整的结束元素。

public class MyXmlWriter : XmlTextWriter
{
    // …constructors etc. omitted for the sake of simplicity…

    public override void WriteEndElement()
    {
        // this should do the trick
        WriteFullEndElement();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,还需要做更多的工作,例如Async此方法的版本,但原则上,应该像上面一样容易实现。我建议你寻找到的源代码XmlTextWriter.WriteEndElement,并得出一个版本最适合您的情况。