【问题标题】:C# XML Insert comment into XML after xml tagC# XML 在 xml 标签后插入注释到 XML
【发布时间】:2010-01-18 13:37:17
【问题描述】:

我正在使用 C# 对象来序列化/反序列化 XML。

我想在序列化时向 XML 文件添加注释,此注释将是标准 xml 标记 <?xml version="1.0" encoding="UTF-8"?> 之后的基本 <!-- comment -->

此注释不需要反序列化,它是一个基本注释,用于指示创建 xml 文件的产品和版本。

【问题讨论】:

  • 你的问题是?如何在序列化的 xml 中添加此注释?
  • 我将对象序列化为 XML,注释在对象的表示之外,只是 xml 中的注释。
  • 我可以用 XMLtag+Comment 替换 XMLtag,但这似乎不是最优雅的解决方案。

标签: c# xml xml-serialization xml-deserialization


【解决方案1】:

你可以使用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();
}

【讨论】:

  • +1000000 知道 Jon Skeet 不知道的事情:P(这是一个很好的答案)
【解决方案2】:

将其序列化为 XML,将该 XML 加载为 XDocument(或您想要的任何 API),插入注释,再次保存。简单,并且应该与您想要使用的任何 API 一起使用。您可以使用 MemoryStream 作为临时存储在内存中完成所有操作。

可能可以直接序列化成新的XDocument/XmlDocument,但我不知道。

【讨论】:

    【解决方案3】:

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

    实现它的注意事项是您现在可能需要在所有相关的嵌套对象上实现它。 (即,如果您有一个包含用户对象的部门对象,并且您想要对部门进行评论,则需要在部门和用户上实现 IXmlSeriablizable)。此外,由于您是直接管理序列化,如果您向类添加新属性,您将需要手动修改 IXmlSerializable 方法。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-19
      • 1970-01-01
      • 2012-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-18
      相关资源
      最近更新 更多