处理XML文件会删除注释

时间:2010-05-09 08:33:11

标签: c# .net xml

此代码段<!--Please don't delete this-->是我的xml文件的一部分。运行此方法后,生成的xml文件不再包含此代码段<!--Please don't delete this-->。这是为什么?

这是我的方法:

         XmlSerializer serializer = new XmlSerializer(typeof(Settings));
         TextWriter writer = new StreamWriter(path);
         serializer.Serialize(writer, settings);
         writer.Close();    

2 个答案:

答案 0 :(得分:4)

嗯,这很明显:

  • XmlSerializer将解析XML文件并从中提取Settings的所有实例 - 您的评论不会成为任何这些对象的一部分
  • 当你再次写回来时,只会再次写出Settings个对象的内容

您的评论将会落空 - 但只要您使用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节点(包括注释)复制到新文件中。

答案 1 :(得分:1)

<!-- -->表示XML中的注释。您正在将对象写入XML - 对象在编译期间编译时没有注释。

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