オブジェクトのXMLへのシリアライズ

C#のクラスを継承したものがあります。オブジェクトのビルドには成功しました。しかし、そのオブジェクトをXMLにシリアライズする必要があります。簡単にできる方法はありますか?

クラスはシリアル化のためにセットアップされているように見えますが、どうやってXML表現を得るのかわかりません。私のクラス定義は次のようなものです。

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.domain.com/test")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://www.domain.com/test", IsNullable = false)]
public partial class MyObject
{
  ...
}

以下は、私ができると思ったことですが、うまくいきません。

MyObject o = new MyObject();
// Set o properties
string xml = o.ToString();

このオブジェクトのXML表現を取得するにはどうしたらいいですか?

ソリューション

XMLのシリアル化には、XmlSerializerを使用する必要があります。以下にサンプルスニペットを示します。

 XmlSerializer xsSubmit = new XmlSerializer(typeof(MyObject));
 var subReq = new MyObject();
 var xml = "";

 using(var sww = new StringWriter())
 {
     using(XmlWriter writer = XmlWriter.Create(sww))
     {
         xsSubmit.Serialize(writer, subReq);
         xml = sww.ToString(); // Your XML
     }
 }
解説 (7)

オブジェクトをシリアル化するには、次のようにします。

 using (StreamWriter myWriter = new StreamWriter(path, false))
 {
     XmlSerializer mySerializer = new XmlSerializer(typeof(your_object_type));
     mySerializer.Serialize(myWriter, objectToSerialize);
 }

また、XmlSerializerを動作させるには、パラメータなしのコンストラクタが必要であることも覚えておいてください。

解説 (1)

この方法についての良いチュートリアルがあります

基本的には、System.Xml.Serialization.XmlSerializerクラスを使って行うことになります。

解説 (0)