C#のオブジェクトをXMLへシリアライズ その1

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();
        }
    }

 

 

 

 

つづく