私は、XmlSerializer クラスと、System.Xml.Serialization 名前空間の属性とクラスで常に大きな成功を収めてきました。
逆シリアル化またはオブジェクトへの読み込みが必要な複雑な XML データがある場合、私はいつも最初に別の方法をとっていました。つまり、まず .NET オブジェクトをインスタンス化してからシリアル化します。次に、.NET オブジェクトに属性をゆっくりと段階的に追加して、シリアル化する方法を制御します。とにかく、System.Xml.Serialization名前空間のクラスを使用すると、オブジェクトをシリアル化する方法を完全に制御できます。メンバー変数を属性または要素としてシリアル化できます。オブジェクトの配列をシリアル化でき、メンバー変数も無視できます。xml 要素の名前をメンバー変数名とは異なる名前に変更できます... つまり、非常に強力です。
しかし、とにかく、トリックは後ろに行くことです。最初に .NET オブジェクトを作成してから、XML へのシリアル化を少しずつ開始します。好きなように取得すると、自動的に非常に簡単に逆シリアル化できます。
したがって、カスタム型は次のようにシリアル化/逆シリアル化できます。
[Serializable]
[XmlRoot(Namespace = "www.google.com",
ElementName = "BuildServicOptions",
DataType = "string",
IsNullable = true)]
public class Options {...}
XML は次のようになります。
<BuildServiceOptions ....>
</BuildServiceOptions>
配列は次のようにシリアル化できます。
[XmlArray("EmailNotifications")]
[XmlArrayItem("email")]
public string[] EmailNotifications;
XML は次のようになります。
<EmailNotifications>
<email>Peter@foo.com</email>
<email>James@foo.com</email>
<email>John@foo.com</email>
</EmailNotifications>
メンバー変数は、次のように無視できます。
[XmlIgnore]
public string ServerProjectDir;
メンバー変数は属性としてシリアル化できます
[XmlAttribute("Name")]
public string ProjectName;
メンバー変数であるカスタム データ型がある場合は、簡単です。そのクラスにシリアル化属性を追加するだけです。実際、XML ファイルに書き出す必要のあるすべてのクラスは、クラス定義にも属性を持つ必要があります。