C#XML在xml标记之后将注释插入XML

时间:2010-01-18 13:37:17

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

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

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

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

3 个答案:

答案 0 :(得分:11)

您可以使用XDocument直接序列化为新的CreateWriter

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();
}

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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

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

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