在XML标签后插入注释的C# XML代码

3
我正在使用C#对象对XML进行序列化/反序列化。
在序列化时,我想要添加一个注释到XML文件中。这个注释将是一个基本的<!-- comment -->,位于标准的xml标签<?xml version="1.0" encoding="UTF-8"?>之后。
这个注释不需要被反序列化,它只是一个基本的注释,用于指示创建XML文件的产品和版本。

你的问题是什么?我该如何在序列化的 XML 中添加此注释? - Natrium
我正在将对象序列化为XML,注释位于对象的表示之外,只是XML中的注释。 - Mark Redman
我可以用XMLtag+Comment替换XMLtag,但这似乎不是最优雅的解决方案。 - Mark Redman
3个回答

11
您可以使用CreateWriter直接将内容序列化到一个新的XDocument中:
XDocument document = new XDocument();
document.Add(new XComment("Product XY Version 1.0.0.0"));
using (XmlWriter writer = document.CreateWriter())
{
    serializer.WriteObject(writer, graph);
}
document.Save(Console.Out);

另一种方法是,您也可以将其序列化为任何其他XmlWriter

using (XmlWriter writer = XmlWriter.Create(Console.Out))
{
    writer.WriteStartDocument();
    writer.WriteComment("Product XY Version 1.0.0.0");
    serializer.WriteObject(writer, graph);
    writer.WriteEndDocument();
}

2
+1000000 知道一些 Jon Skeet 不知道的东西 :P (而且这是一个很好的答案) - Grant Peters

2
将其序列化为XML,将该XML加载为XDocument(或您想要使用的任何API),插入注释,然后再次保存。简单,并且应该可以与您想要使用的任何API一起使用。您可以在内存中使用MemoryStream作为临时存储来完成所有操作。
也许有一种直接序列化到新的XDocument/XmlDocument的方法,但我不知道。

0

我相信你可以在你的对象上实现IXMLSeriablizable接口。如果我没记错的话,当序列化/反序列化时,该接口中的ReadXML(XmlReader reader)和WriteXML(XmlWriter writer)方法会自动调用(CreateSchema或第三个方法不需要实现)。

实现它的一个注意点是,你现在可能需要在所有相关嵌套对象上实现它。(例如,如果你有一个包含用户对象的部门对象,并且你想要在部门上添加注释,那么你需要在Department和User上都实现IXmlSeriablizable)。此外,由于你直接管理序列化,如果你向类中添加新属性,则需要手动修改IXmlSerializable方法。

通常我会在我的对象上实现IXmlSerializable,因为我喜欢直接控制序列化的内容和方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接