読者です 読者をやめる 読者になる 読者になる

いろいろ備忘録日記

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

Soap形式でのシリアライズ

.NETでは、Soap形式でのシリアライズもサポートされています。
やり方は、バイナリ形式とほぼ同じで利用するフォーマッターを
BinaryFormatterからSoapFormatterに変更するだけです。


移植性をあげたり、Webサービス経由でデータをやり取りする必要が
ある場合は便利な形です。


以下サンプルです。

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

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Soap;

namespace Gsf.Samples.CSharp{

    [Serializable]
    public class SoapSerializableClass{
        string _value;

        public string Value{
            get{
                return _value;
            }
            set{
                _value = value;
            }
        }
    }

    class SoapSerializeSample{

        const string FILE_NAME = "SoapSerializableClass.xml";

        public void Execute(){

            try{

                SoapSerializableClass obj = new SoapSerializableClass();
                obj.Value = obj.GetType().Name;

                //
                // 使用するフォーマッターを作成.
                //
                IFormatter formatter = new SoapFormatter();

                //
                // シリアライズ.
                //
                using(Stream stream = new FileStream(FILE_NAME, FileMode.Create, FileAccess.Write)){
                    formatter.Serialize(stream, obj);
                }

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

                //
                // デシリアライズ.
                //
                using(Stream stream = new FileStream(FILE_NAME, FileMode.Open, FileAccess.Read)){
                    SoapSerializableClass deObj = formatter.Deserialize(stream) as SoapSerializableClass;

                    Console.WriteLine(deObj.Value);
                }

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

        }

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