C# 处理XML文件将删除注释

C# 处理XML文件将删除注释,c#,.net,xml,C#,.net,Xml,此代码段是我的xml文件的一部分。运行此方法后,生成的xml文件不再包含此代码段。为什么会这样 以下是我的方法: XmlSerializer serializer = new XmlSerializer(typeof(Settings)); TextWriter writer = new StreamWriter(path); serializer.Serialize(writer, settings); writer.Cl

此代码段是我的xml文件的一部分。运行此方法后,生成的xml文件不再包含此代码段。为什么会这样

以下是我的方法:

         XmlSerializer serializer = new XmlSerializer(typeof(Settings));
         TextWriter writer = new StreamWriter(path);
         serializer.Serialize(writer, settings);
         writer.Close();    
表示XML中的注释。您正在将对象写入XML—对象在编译过程中编译出来时没有注释


也就是说,
Settings
对象(可能是.config XML的反序列化形式)在反序列化后不会在内存中保存注释,因此它们也不会被序列化回来。对于框架的这种行为,您无能为力,因为没有使用
XmlSerializer

反序列化注释的内置机制,这一点非常明显:

  • XmlSerializer
    将解析XML文件,并从中提取
    设置的所有实例
    ——您的注释不会成为任何这些对象的一部分
  • 当您再次写出这些内容时,只会再次写出
    设置
    对象的内容
您的评论将落空——但我看不到任何方法可以“保存”该评论,只要您使用的是XmlSerializer方法

您需要做的是改用XmlReader/XmlWriter:

XmlReader reader = XmlReader.Create("yourfile.xml");
XmlWriter writer = XmlWriter.Create("your-new-file.xml");

while (reader.Read())
{
   writer.WriteNode(reader, true);
}

writer.Close();
reader.Close();

这将把所有xml节点(包括注释)复制到新文件中。

任何特定语言?XML库?我还有其他保存这些评论的方法吗?这取决于你想做什么-如果你只是想复制文件,你可以使用@marc_s建议的方法。如果需要更新设置,则需要编写一些自定义XML解析代码来保留注释。他将如何使用这种方法保留注释并更新对设置的更改?我使用了上述代码,但没有对XML文件进行任何更改。@oded,@little:well,如果要在读取原始文件时修改内容,则需要在读取XML节点时对其进行解析。在调用reader.Read()之后,您可以访问底层XML节点——您可以用任何方式修改它,形状或形式。