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

C#でのオブジェクトのシリアル化方法をわかりやすく解説

C#では、オブジェクトをファイルに保存したり、ネットワーク経由で送信したりする際に「シリアル化(シリアライズ)」を行います。シリアル化とは、オブジェクトの状態をバイトストリームに変換する処理のことです。

BinaryFormatterを使ったシリアル化の手順

以下のコードでは、BinaryFormatter.Serialize(stream, reference) メソッドを使用して、サンプルオブジェクトをシリアル化しています。

1. コンストラクタの定義

まず、Employeeクラスに値を受け取るコンストラクタを定義します。

public Employee(int id, string name, int salary) {
    this.id = id;
    this.name = name;
    this.salary = salary;
}

2. ファイルストリームとBinaryFormatterの設定

次に、出力先となるFileStreamと、シリアル化を行うBinaryFormatterのインスタンスを作成します。

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

3. オブジェクトの生成とシリアル化の実行

Employeeクラスのオブジェクトを生成し、Serializeメソッドを使ってストリームに書き込みます。

Employee emp = new Employee(001, "Jim", 30000);
bFormat.Serialize(fStream, emp);

注意点:BinaryFormatterは非推奨

なお、BinaryFormatterにはセキュリティ上の脆弱性が指摘されており、.NET 5以降では非推奨となっています。新規開発では、JSON形式を扱うSystem.Text.Jsonや、XML形式を扱うXmlSerializerなど、より安全なシリアライザを使用することが推奨されます。

  1. JavaScriptのオブジェクトメソッドとは?基本の考え方とアクセス方法を解説

    JavaScriptにおけるメソッドとはJavaScriptにおける「メソッド」とは、オブジェクトに対して実行される動作(アクション)のことです。メソッドはオブジェクトのプロパティの一種であり、文字列や数値などのデータと同じように、オブジェクトの中に関数として格納されます。例えば、従業員(employee)オブジェクトを考えてみましょう。「名前:Amit」「部署:Marketing」「社員ID:001」といった情報がプロパティとして格納されているように、それらの情報を組み合わせて表示する処理も、detailsのようなメソッドとして持たせることができます。オブジェクトメソッドへのアクセス方法Ja

  2. Pythonのmarshalモジュールで内部オブジェクトをシリアライズする方法

    Python標準ライブラリのmarshalモジュールは、pickleモジュールと同様にオブジェクトのシリアライズ(直列化)機能を提供します。しかし、一般的なデータ永続化やソケット経由でのPythonオブジェクト送受信といった用途にはあまり向いていません。このモジュールが主に使われるのは、Python自身によるコンパイル済みPythonモジュール(.pycファイル)の読み書き処理です。実は、marshalモジュールが使用するデータ形式はPythonのバージョン間(マイナーバージョン間でさえも)互換性がないため、あるバージョンでコンパイルされたPythonスクリプト(.pycファイル)は、別のバー