System.Xml.Serialization.XmlSerializerクラスを使うとオブジェクトの内容を簡単にXML形式で保存したり、逆にそのXMLからオブジェクトを作り直したり出来る。
※但し、XMLへ出力されるのはpublicなフィールドとプロパティのみ
※privateやprotectedなフィールドは出力されない
オブジェクトをXMLファイルへ保存する場合
public class TestClass { public string ValueA; public int ValueB; private int _ValueC; public int ValueC { get { return _ValueC; } set { _ValueC = value; } } } public partial class MainWindow : Window { private void Test() { var testObj = new TestClass(); testObj.ValueA = "テスト"; testObj.ValueB = 1; testObj.ValueC = 2; var se = new System.Xml.Serialization.XmlSerializer(typeof(TestClass)); var sw = new System.IO.StreamWriter("d:\\test.xml", false, new System.Text.UTF8Encoding(false)); se.Serialize(sw, testObj); sw.Close(); } }
出来あがるXMLファイル
<?xml version="1.0" encoding="utf-8"?> <TestClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <ValueA>テスト</ValueA> <ValueB>1</ValueB> <ValueC>2</ValueC> </TestClass>
privateな「_ValueCフィールド」は出力されないが、getter/setterを持つ「ValueCプロパティ」は出力される。
XMLファイルを読み込んでオブジェクトを構築する場合
public partial class MainWindow : Window { private void Test() { var se = new System.Xml.Serialization.XmlSerializer(typeof(TestClass)); var sr = new System.IO.StreamReader("d:\\test.xml", new System.Text.UTF8Encoding(false)); var testObj = (TestClass)se.Deserialize(sr); sr.Close(); } }
コメントをお書きください