いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

XML形式のシリアライズ・デシリアライズ

これから、メモ代わりにちょこちょことしたサンプルを
記述していく予定です。


XML形式でシリアライズするには、

System.Xml.Serialization.XmlSerializer

クラスを使用します。


コンストラクタシリアライズをしたいクラスのTypeを
渡せば、後はSerialize, Deserializeメソッドを呼ぶだけです。

// vim:set ts=4 sw=4 et ws is nowrap ft=cs:

using System;
using System.IO;
using System.Xml.Serialization;

namespace Gsf.Samples.CSharp{

    public class MySerializableClass{

        public  string PublicField;
        private string _propertyValue;

        public string PropertyValue{
            get{
                return _propertyValue;
            }
            set{
                _propertyValue = value;
            }
        }
    }

    public class XMLSerializeSample{

        const string FILE_NAME = "MySerializableClass.xml";


        public void Execute(){
            /////////////////////////////////////////////////////////////////////////////
            // [注意点]
            // シリアライズを行う場合は、そのクラスのスコープがpublicでないといけない.
            //
            try{

                MySerializableClass obj = new MySerializableClass();

                obj.PublicField  = "public field value.";
                obj.PropertyValue = "property value.";

                //
                // シリアライズ.
                //
                XmlSerializer serializer = new XmlSerializer(typeof(MySerializableClass));
                using(TextWriter writer = new StreamWriter(FILE_NAME)){
                    serializer.Serialize(writer, obj);
                }

                //
                // 出力内容を表示.
                //
                using(TextReader reader = new StreamReader(FILE_NAME)){
                    for(string line = null; (line = reader.ReadLine()) != null; Console.WriteLine(line));
                }

                //
                // デシリアライズ.
                //
                using(TextReader reader = new StreamReader(FILE_NAME)){
                    MySerializableClass deObj = serializer.Deserialize(reader) as MySerializableClass;

                    Console.WriteLine(deObj.PublicField);
                    Console.WriteLine(deObj.PropertyValue);
                }

            }finally{
                //
                // 後始末.
                //
                File.Delete(FILE_NAME);
            }

        }

        static void Main(){
            new XMLSerializeSample().Execute();
        }

    }
}