げんさん日記

プログラミングで気付いた事等を書きます。

ジェネリックを使用したモデルの保存・リストアを行います。

2019年11月06日 11時06分00秒 | C#
データモデル内にジェネリックが存在する場合に通常のSerialize及びDeserializeではエラーになり正しく処理できない為、データを一度メモリに出力し、その内容をシリアライズする事でジェネリックデータの保存を可能にします。その方法を下記に記します。

オブジェクトを保存する。
public void Save<T>(T saveObject, string fileName)
{
  // データをシリアライズして保存します。
  using (var memoryStream = new MemoryStream())
  {
    var binaryFormatter = new BinaryFormatter();
    binaryFormatter.Serialize(memoryStream, saveObject);
    System.IO.File.WriteAllBytes(fileName, memoryStream.ToArray());
    binaryFormatter = null;
  }
}

オブジェクトをリストアする。
public T Restore(string fileName)
{
  var binaryFormatter = new BinaryFormatter();

  try
  {
    using (var memoryStream = new MemoryStream(System.IO.File.ReadAllBytes(fileName)))
    {
      memoryStream.Seek(0, SeekOrigin.Begin);
      var obj = binaryFormatter.Deserialize(memoryStream);
      return (T)obj;
    }

  }
  finally
  {
    binaryFormatter = null;
  }
}