C#シリアライゼーションとデシリアライゼーション:実践例で学ぶオブジェクト永続化
C#におけるシリアライゼーションとデシリアライゼーション
オブジェクトデータをアプリケーション間で移動させたり、セッション間で持続させたりする必要があるとき、シリアライゼーションとデシリアライゼーションは不可欠です。C#では、シリアライゼーションはオブジェクトの状態をストレージメディア(一般的にはファイル)に書き込み、デシリアライゼーションはその格納表現からオブジェクトを再構築します。
Tutorialというシンプルなクラスを考えます。これはIDとNameという2つのプロパティを保持します。このクラスのインスタンスをファイルにシリアライズすることで、後でファイルを読み取り、元のデータを保持したまま同じオブジェクトを再作成できます。
C#でオブジェクトをシリアライズする方法
以下はコンソールアプリケーションでのプロセスを示すステップバイステップウォークスルーです。
IDとNameプロパティを持つTutorialクラスを作成。- クラスをインスタンス化し、
ID = 1、Name = ".Net"を割り当て。 - オブジェクトを
Example.txtというファイルにシリアライズ。 - ファイルからオブジェクトをデシリアライズし、その値をコンソールに表示。
以下のコードをProgram.csファイルに貼り付けてください。
ステップ1) クラスを追加。最初のステップはシリアライズされるクラスを追加することです。

コード解説:
- クラスには
[Serializable]属性を付与必須。なければシリアライゼーション失敗。 int IDとstring Nameの2フィールドを持つTutorialクラスを定義。
ステップ2) オブジェクトを作成しシリアライズ。このステップでTutorialオブジェクトをインスタンス化し、Example.txtに書き込みます。

コード解説:
Tutorialインスタンスを作成し、ID = 1、Name = ".Net"を設定。BinaryFormatterをインスタンス化(注:BinaryFormatterは.NET 5+で非推奨。本番コードではSystem.Text.JsonやXmlSerializerを検討)。FileMode.CreateとFileAccess.WriteでFileStreamをオープンし、バイナリデータを書き込み。formatter.Serializeでオブジェクトをストリームに書き込み、ストリームをクローズ。
ステップ3) オブジェクトをデシリアライズ。最後にファイルからデータを読み戻し、プロセスを検証します。

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace DemoApplication {
[Serializable]
class Tutorial {
public int ID;
public string Name;
static void Main(string[] args) {
Tutorial obj = new Tutorial();
obj.ID = 1;
obj.Name = ".Net";
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("E:\\ExampleNew.txt", FileMode.Create, FileAccess.Write);
formatter.Serialize(stream, obj);
stream.Close();
stream = new FileStream("E:\\ExampleNew.txt", FileMode.Open, FileAccess.Read);
Tutorial objnew = (Tutorial)formatter.Deserialize(stream);
Console.WriteLine(objnew.ID);
Console.WriteLine(objnew.Name);
Console.ReadKey();
}
}
}
コード解説:
- 読み取りモードでファイルをオープン。
- バイナリデータを
Tutorialインスタンスにデシリアライズ。 IDとNameをコンソールに出力。
Visual Studioでプログラム実行すると以下の出力:
出力:

ご覧の通り、値がファイルから正しく取得されました。
まとめ
シリアライゼーションはオブジェクトデータをファイルに書き込み、デシリアライゼーションはそのデータをオブジェクトに読み戻します。この基本技術は多くの.NETデータ交換シナリオの基盤となっています。
C言語
- C# クラスとオブジェクト:堅牢な OOP の基礎
- C# 抽象クラスと抽象メソッドをマスターする:実践ガイド
- C# 部分クラスと部分メソッドを理解する
- C# sealed クラスとメソッドをマスターする:使用判断、実例、コードの安全性とパフォーマンス向上
- C++演算子を徹底解説:種類、例、サンプルプログラム付き
- C++クラスとオブジェクト:コード例付き実践ガイド
- C++ structとclassの違い:構文、特徴、使い分けのベストプラクティス
- C#抽象クラス実践チュートリアル:コード例で理解する設計パターン
- Python type()とisinstance()の理解:実例付き解説
- Javaファイル操作のマスター:java.ioによる作成・読み取り・書き込み・削除
- Java BufferedReader でファイル読み込み:実践ガイドと例