C#
 Computer >> コンピューター >  >> プログラミング >> C#

C# .NETのシリアル化とは?基本の仕組みとBinaryFormatterを使った実装例

シリアル化(シリアライズ)とは

シリアル化とは、オブジェクトの状態をバイトストリーム(バイト列)に変換し、ストリームへ書き出せる形式にする処理のことです。これにより、オブジェクトのデータをメモリ、ファイル、データベースなどに保存できるようになります。

保存したデータは、後から逆シリアル化(デシリアライズ)によって元のオブジェクトとして復元できるため、アプリケーション間でのデータ交換や永続化の目的で広く利用されています。

C# .NETでは、シリアル化は主に次の2つの方法で行うことができます。

バイナリシリアル化

バイナリシリアル化では、オブジェクトのすべてのメンバーが対象になります。読み取り専用(readonly)のメンバーであっても、例外なくシリアル化されます。データがコンパクトになり高速なのが特徴ですが、生成されるのはバイナリ形式のため、人間が直接読むことはできません。

XMLシリアル化

XMLシリアル化では、オブジェクトのパブリックなフィールドとプロパティだけが対象となり、特定のXMLスキーマ定義言語(XSD)ドキュメントに準拠したXMLストリームへ変換されます。テキストベースのため可読性が高く、異なるプラットフォーム間でのデータ交換にも適しています。

シリアル化の実装例

ここでは、実際のコード例を見てみましょう。まず、書き込み先となるファイルストリームと、BinaryFormatterのインスタンスを作成します。

FileStream fstream = new FileStream("d:\\new.txt", FileMode.OpenOrCreate);
BinaryFormatter formatter = new BinaryFormatter();

次に、シリアル化したいクラスのオブジェクトを作成します。ここでは3つの引数を持つコンストラクタを呼び出しています。

Employee emp = new Employee(030, "Tom", "Operations");

最後に、Serializeメソッドを呼び出してシリアル化を実行します。これでEmployeeオブジェクトの内容が指定したファイルに書き込まれます。

formatter.Serialize(fstream, emp);

まとめ

C# .NETのシリアル化は、オブジェクトを保存・転送可能な形式に変換する重要な機能です。すべてのメンバーを対象にできる「バイナリシリアル化」と、パブリックメンバーをXML形式に変換する「XMLシリアル化」の2種類があり、用途に応じて使い分けることができます。なお、BinaryFormatterにはセキュリティ上の脆弱性が指摘されているため、新規開発ではSystem.Text.Jsonなどのモダンなシリアライザーの利用も検討するとよいでしょう。

  1. ASP.NET Web API(C#)の組み込みメッセージハンドラーとは?仕組みと種類を解説

    メッセージハンドラー(Message Handler)とは、HTTPリクエストを受け取り、HTTPレスポンスを返す役割を持つクラスのことです。すべてのメッセージハンドラーは、抽象クラス HttpMessageHandler から派生します。このハンドラーを利用することで、リクエストが HttpControllerDispatcher に到達する前に、その内容を処理・編集、あるいは拒否することができます。メッセージハンドラーは、リクエスト処理パイプラインのごく早い段階で実行されるため、Web APIにおける横断的関心事(クロスカッティングコンサーン)を実装するのに最適な場所です。メッセージハンド

  2. シリアライズ(直列化)とは?仕組みからマーシャリングとの違い、活用例まで徹底解説

    最近のプロジェクト進捗ミーティングで、私たちのチームは「シリアライズ(直列化)」を使ってアプリケーション間でデータをやり取りする方法について話し合いました。すると、ソフトウェア開発にもっと携わりたいというエンジニアから、「その用語はよく知らない」という声が上がりました。こうした重要なプロセスは、規模の大きいプロジェクトに踏み込むまで登場しないため、見落とされがちです。この方にとってはそうでしたし、かつての私自身もまったく同じでした。そこで、この記事を書くことにしました。あの日同僚にシリアライズについて教えたように、今日はあなたにその知識をお伝えします。シリアライズとは何か?シリアライズとは、あ