C# シリアル化

MSDN の説明が一番分かりやすい。以下、参照。

シリアル化とは、オブジェクトの状態を永続化または転送できる形式に変換するプロセスのことです。シリアル化を補完するプロセスとして逆シリアル化があり、これは、ストリームをオブジェクトに変換するプロセスです。これらのプロセスを組み合わせて使用することで、データを簡単に格納したり、転送したりできます。

なお、クラスのメンバに値型でなく参照型が一つでも含まれている場合は、シリアル化できません。以下のように簡単にできます。

[Serializable] // シリアル化できるクラスであることを明示
class SumOf
{
  private int[] sums;

  public static void Main()
  {
    SumOf s1 = new SumOf(1, 10);
    s1.Serialize(); // シリアル化
    SumOf s2 = SumOf.DeSerialize(); // デシリアル化、s1 と同じ値を持つインスタンスを作成
  }

  public SumOf(int start, int end)
  {
    int count = end - start + 1;
    sums = new int[count];
    sums[0] = start;
    for (int i = 1, j = start + 1; i < count; i++, j++)
    {
      sums[i] = j + sums[i - 1];
    }
  }

  public void Serialize()
  {
    FileStream stream = new FileStream("SumOf.out", FileMode.Create); // ファイルストリームの作成
    BinaryFormatter formatter = new BinaryFormatter();
    formatter.Serialize(stream, this); // ファイル上にシリアライズ
    stream.Close();
  }
  public static SumOf DeSerialize()
  {
    FileStream stream = new FileStream("SumOf.out", FileMode.Open); // ファイルストリームの作成
    BinaryFormatter formatter = new BinaryFormatter();
    SumOf s = (SumOf)formatter.Serialize(stream); // ファイルからデシリアライズ
    stream.Close();
    return s;
  }
}