.Net Framework4+ C#

XMLデータをクラスオブジェクトに変換(デシリアライズ)したり、逆にオブジェクトをXMLに変換(シリアライズ)したりしてみます

.Net FrameworkにはXML DOMを扱うクラスが用意されています(System.Xml名前空間)

通常は、このSystem.Xml名前空間のクラスを使ってXMLの内容を解析したり出力したりしますが少々面倒だったりします

そこで、XMLSerializerの出番です

System.Xml.Serialization名前空間にあるこのクラスを使えば、XMLデータから自作クラスのオブジェクトを生成したり、またはその逆ができます

目次

  • Page.1
    • 構造が単純なXMLデータをクラスオブジェクトに変換する
  • Page.2
    • 階層化されたXMLデータをクラスオブジェクトに変換する
  • Page.3
    • 繰り返しタグ(属性付き)のあるXMLデータをクラスオブジェクトに変換する
  • Page.4
    • クラスオブジェクトをXMLファイルに出力(シリアライズ)する
  • Page.5
    • XMLファイルに出力(シリアライズ)時にタグの出力を制御する

構造が単純なXMLデータをクラスオブジェクトに変換する

以下のようなXMLデータがあるとします

figure1.xml

<?xml version="1.0" encoding="utf-8"?>
<person>
  <firstname>一郎</firstname>
  <lastname>山田</lastname>
  <birthday>2001/10/01</birthday>
</person>

この構造にあわせたクラスをまずは作ります

クラス及びプロパティに属性をそれぞれ定義し、XMLタグ名とクラス及びプロパティを結びつけます

(*)タグ名とクラス名が同じ場合は属性を指定する必要はありませんが、大文字・小文字を判別します

//サンプルコード
namespace Sample.model
{
  [System.Xml.Serialization.XmlRoot("person")]
  public class PersonModel
  {
      /// <summary>
      /// 名前
      /// </summary>
      [System.Xml.Serialization.XmlElement("firstname")]
      public String FirstName { get; set; }
      /// <summary>
      /// 苗字
      /// </summary>
      [System.Xml.Serialization.XmlElement("lastname")]
      public String LastName { get; set; }
      /// <summary>
      /// 誕生日
      /// </summary>
      [System.Xml.Serialization.XmlElement("birthday")]
      public String Birthday { get; set; }
  }
}

XMLファイルをクラスオブジェクトに読み込む

では、実際にXML(figure1.xml)をクラス(Sample.model.PersonModel)オブジェクトにロードします

System.IO.FileStream fs = new System.IO.FileStream(@"D:¥DATA¥figure1.xml", System.IO.FileMode.Open);

System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(Sample.model.PersonModel));

Sample.model.PersonModel model = (Sample.model.PersonModel)serializer.Deserialize(fs);


System.Console.WriteLine(String.Format("FirstName={0}, LastName={1}, Birthday={2}",model.FirstName,model.LastName, model.Birthday));

実行するとうまく読み込まれていることが確認できます

FirstName=一郎, LastName=山田, Birthday=2001/10/01


続いて、XMLタグが階層化されたものを読み込んでみたいと思います

目次

  • Page.1
    • 構造が単純なXMLデータをクラスオブジェクトに変換する
  • Page.2
    • 階層化されたXMLデータをクラスオブジェクトに変換する
  • Page.3
    • 繰り返しタグ(属性付き)のあるXMLデータをクラスオブジェクトに変換する
  • Page.4
    • クラスオブジェクトをXMLファイルに出力(シリアライズ)する
  • Page.5
    • XMLファイルに出力(シリアライズ)時にタグの出力を制御する

関連ページ