3

XML をシリアライズ/デシリアライズするために C# オブジェクトを使用しています。

シリアル化中に XML ファイルにコメントを追加したいのですが、このコメントは<!-- comment --> 標準の xml タグの後の基本になります。<?xml version="1.0" encoding="UTF-8"?>

このコメントはデシリアライズする必要はありません。xml ファイルを作成した製品とバージョンを示す基本的なコメントです。

4

3 に答える 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();
}
于 2010-01-18T13:59:57.387 に答える
2

それを XML にシリアル化し、その XML をXDocument(または必要な API として) ロードし、コメントを挿入して、再度保存します。シンプルで、使用したい API で動作するはずです。MemoryStreamを一時ストレージとして使用して、すべてをメモリ内で行うことができます。

新しい/に直接シリアル化する方法があるかもしれませんが、私はそれを認識していません。XDocumentXmlDocument

于 2010-01-18T13:46:00.207 に答える
0

オブジェクトにIXMLSeriablizableを実装できると思います。私の記憶が正しければ、そのインターフェイスからのReadXML(XmlReaderリーダー)とWriteXML(XmlWriterライター)は、シリアル化/逆シリアル化時に自動的に呼び出されます(CreateSchema、または3番目のメソッドは実装する必要はありません)。

これを実装する際の注意点は、関連するすべてのネストされたオブジェクトに実装する必要がある場合があることです。(つまり、Userオブジェクトを含むDepartmentオブジェクトがあり、Departmentsに関するコメントが必要な場合は、DepartmentとUserの両方にIXmlSeriablizableを実装する必要があります)。また、シリアル化を直接管理しているため、クラスに新しいプロパティを追加する場合は、IXmlSerializableメソッドを手動で変更する必要があります。

何をどのようにシリアル化するかを直接制御するのが好きなので、通常はオブジェクトにIXmlSerializableを実装します。

于 2010-01-18T14:14:01.827 に答える