データモデル内にジェネリックが存在する場合に通常の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;
}
}
{
// データをシリアライズして保存します。
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;
}
}
{
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;
}
}