私は、メタプログラミングのコンテキストで Roslyn を試してきましたが、ISolution または IProject オブジェクトをデータベースに永続化する際に問題が発生しました。これは、ISolution オブジェクトをバイト配列にシリアライズしてから、オブジェクトに戻そうとしたものです。クラスがシリアル化可能な例外としてマークされていないことに遭遇しました。私はこれについてどんな考えにもオープンです。私がこれに間違った方法でアプローチしている場合は、遠慮なくそう言ってください。
更新: これらのアイテムをデータベースにシリアル化する必要がある私の理由には、遺伝的プログラミングの実験が含まれます。基本的に、ソリューションを変更するか、プロジェクトを少し変更してから、新しく変更されたプログラムをテストし、テスト段階でうまくいった場合は、その変更されたプログラムを将来の世代に使用できます。残念ながら、これらすべてのオブジェクトを常にメモリに保持するのは少し非現実的です。停電は、これらのエンティティの状態を維持する正当な理由の 1 つですが、他にも理由があります。したがって、必ずしもこれらのものをバイト単位でシリアル化する必要はありません。必要なときにこれらのオブジェクトを再構築できるように、最小限の情報を保存することができます。ただし、最終目標を達成するための最も効率的な方法はわかりません。
public static object ByteArrayToObject(this byte[] arrBytes)
{
MemoryStream serializationStream = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
serializationStream.Write(arrBytes, 0, arrBytes.Length);
serializationStream.Seek(0L, SeekOrigin.Begin);
return formatter.Deserialize(serializationStream);
}
public static byte[] ObjectToByteArray(this object obj)
{
if (obj == null)
{
return null;
}
BinaryFormatter formatter = new BinaryFormatter();
MemoryStream serializationStream = new MemoryStream();
formatter.Serialize(serializationStream, obj);
return serializationStream.ToArray();
}