1. ホーム
  2. c#

[解決済み】オブジェクトをXMLにシリアライズする

2022-03-28 21:47:20

質問

継承した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
     }
 }

kiquenet のリクエストによる汎用クラス。

public class MySerializer<T> where T : class
{
    public static string Serialize(T obj)
    {
        XmlSerializer xsSubmit = new XmlSerializer(typeof(T));
        using (var sww = new StringWriter())
        {
            using (XmlTextWriter writer = new XmlTextWriter(sww) { Formatting = Formatting.Indented })
            {
                xsSubmit.Serialize(writer, obj);
                return sww.ToString();
            }
        }
    }
}

の使い方を説明します。

string xmlMessage = MySerializer<MyClass>.Serialize(myObj);