概要
オブジェクトのインスタンスを永続化することをシリアル化と呼びます。シリアル化は、C#を使えば簡単に実現できます。
日常でたとえると
お客様の情報を保存しておく。
使用に適した状況
オブジェクトのインスタンスを保存する必要があるとき。
サンプル
/*----------------------------------------------------
*
* SOAP形式でシリアル化する。
*
----------------------------------------------------*/
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Soap;
//シリアル化するオブジェクトに属性を指定
[Serializable]
class Sample
{
public int X { get; set; }
public int Y { get; set; }
//シリアル化しない
[NonSerialized]
public readonly int Z = 0;
public override string ToString( )
{
return String.Format( "X:{0}, Y:{1}",
this.X, this.Y );
}
static void Main( )
{
string name = "Sample.data";
var formatter = new SoapFormatter();
Serialize( formatter, name );
Deserialize( formatter, name );
Console.ReadLine();
}
//シリアライズ
private static void Serialize( SoapFormatter formatter, string name )
{
//処理開始
Console.WriteLine( "オブジェクトをシリアライズします・・・" );
//データを用意
var data = new Sample();
data.X = 100;
data.Y = 100;
Console.WriteLine( "データの内容\n{0}",
data.ToString() );
//保存先を用意
var file = new FileInfo( name );
FileStream stream = file.Open(
FileMode.OpenOrCreate,
FileAccess.ReadWrite,
FileShare.Delete );
//バイナリフォーマッタでシリアライズする
formatter.Serialize( stream, data );
stream.Close();
//処理終了
Console.WriteLine( "シリアライズ完了しました♪" );
Console.WriteLine();
}
//デシリアライズ
private static void Deserialize( SoapFormatter formatter, string name )
{
//処理開始
Console.WriteLine( "オブジェクトをデシリアライズします・・・" );
//保存先を再度オープンしてデシリアル化する
var file = new FileInfo( name );
FileStream stream = file.Open(
FileMode.OpenOrCreate,
FileAccess.ReadWrite,
FileShare.Delete );
Sample data =
( Sample ) formatter.Deserialize( stream );
Console.WriteLine( "データの内容\n{0}",
data.ToString() );
//後片付け
file.Delete();
//処理終了
Console.WriteLine( "デシリアライズ完了しました♪" );
Console.WriteLine();
}
}
名前空間
SoapFormatterを使用するために、System.Runtime.Serialization.Formatters.Soapを参照します。シリアライズ先を指定するために、ストリームが必要なのでSystem.IOを参照します。
加えて、SoapFormatterはSystem.Runtime.Serialization.Formatters.Soapアセンブリが必要なので、このアセンブリを参照することを忘れないでください。
解説
オブジェクトのインスタンスを、
何らかのストリーム内でグラフ化し、保存及び復元を可能とすることを
シリアル化と呼びます。シリアル化には、2つの段階があり、それを行うのがフォーマッタです。
オブジェクトのインスタンスを保存する事を、シリアライズと呼びます。そして、保存したオブジェクトのインスタンスを復元することをデシリアライズと呼びます。この2つの行為は、何のフォーマット(形式)でするのか決定しなくてはなりません。.NETには、バイナリ形式とSOAP形式の二つが存在します。
SOAPというのは、データをXML形式で記述するプロトコルの事です。正式名称はSimple Object Access Protocolで、いかにしてデータをXML形式でやり取りするのかを定めています。
SOAPフォーマットでシリアル化をするには、
SoapFormatterクラスを使用します。ここで気を付けなければならないのは、シリアル化の対象となるオブジェクトに
Serializable属性を指定しなくてはならない事です。指定を忘れるとシリアル化できません。
オブジェクト単位で属性を指定すると、デフォルトでメンバー(主にプロパティ)がシリアル化の対象となりますが、シリアル化の対象とならないメンバーがあります。例えば、読み取り専用のメンバーはしたくないかもしれません。そんなときは、メンバーに
NonSerialized属性を指定します。そうすれば、そのメンバーはシリアル化の対象になりません。
テーマ : プログラミング
ジャンル : コンピュータ