正直、今更感はありますが… C# を用いて、XMLファイル を読み込んで オブジェクト を生成する デシリアライズ と、 オブジェクト を XMLファイル へ書き込む シリアライズ を行うサンプルコード を覚書きしておきます。
目次
概要(オブジェクトを読み書きするサンプルコード)
この記事の目標は、次に示す サンプルコード のような読み書きができる仕組み(コード)を作ることです。
目標とする読み書きのサンプルコード
namespace Sample { public class Main { public static void Main() { // ファイルからオブジェクトを読み込み(デシリアライズ) var config = XmlUtility.LoadFromFile<Config>("config.xml"); // ファイルへオブジェクトを保存(シリアライズ) XmlUtility.SaveToFile("config.xml", config, typeof(Config)); } } }
上記のような コード で XML と オブジェクト をやり取りするためには、以下の2つを作成する必要があります。
以下で、それぞれについて詳細を見ていきます。
シリアライズ、デシリアライズ 処理
ここでは「XMLファイル と オブジェクト の間でやり取りをする仕組み」を実装します。
XmlUtility.cs
namespace Sample { using System; using System.IO; using System.Xml; using System.Xml.Serialization; ////// XMLファイルの読み書きを補助する機能を提供します。 /// public class XmlUtility { ////// XMLファイルからシリアライズ可能なオブジェクトを読み込みます。 /// ///読み込むオブジェクトの型 /// オブジェクトが保存されたXMLファイルパス ///デシリアライズされたオブジェクト public static T LoadFromFile<T>(string filePath) where T : class { T obj = null; var serializer = new XmlSerializer(typeof(T)); // ファイルが存在するときだけ実行可能 if (!File.Exists(filePath)) { throw new FileNotFoundException(); } // ファイルからオブジェクトの読み込み(デシリアライズ) using (var fs = new FileStream(filePath, FileMode.Open)) { obj = serializer.Deserialize(fs) as T; } return obj; } ////// シリアライズ可能なオブジェクトをXMLファイルへ書き込みます。 /// /// 書き込むXMLファイルパス /// シリアライズするオブジェクト /// シリアライズするオブジェクトの型 public static void SaveToFile(string filePath, object obj, Type type) { var serializer = new XmlSerializer(type); // 書き込む書式の設定 var settings = new XmlWriterSettings(); settings.OmitXmlDeclaration = false; // ファイルへオブジェクトを書き込み(シリアライズ) using (var writer = XmlWriter.Create(filePath, settings)) { serializer.Serialize(writer, obj); } } } }
読み書きする オブジェクト
ここでは「XMLファイル と オブジェクト の間でやり取りをするルール」を実装します。
Config.cs
namespace Sample { using System; using System.Xml.Serialization; [Serializable] [XmlRoot("config")] public class Config { [XmlIgnore] public DateTime TimeStamp { get; set; } [XmlAttribute("id")] public string Id { get; set; } [XmlElement("server")] public string ServerName { get; set; } } }
属性を設定することで、XMLファイル に対してどのように出力するかを設定できます。 これらをうまく設定、構成することで、任意のオブジェクトやXMLファイルを構成していきます。
- XmlRoot
- ルート要素として XMLファイル へ出力
- XmlIgnore
- XMLファイル へ出力しない
- XmlAttribute
- 属性として XMLファイル へ出力
- XmlElement
- 要素として XMLファイル へ出力
今回、以下のサイトを参考にしました。
- オブジェクトの内容をXMLファイルに保存、復元する: .NET Tips: C#, VB.NET
- MSDN - XmlSerializer クラス
- MSDN - XmlWriterSettings クラス
- MSDN - XmlRootAttribute クラス
- MSDN - XmlIgnoreAttribute クラス
- MSDN - XmlAttributeAttribute クラス
- MSDN - XmlElementAttribute クラス
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!