我一直在元编程的上下文中尝试使用 Roslyn,但在将 ISolution 或 IProject 对象持久保存到数据库时遇到了困难。这是我尝试将 ISolution 对象序列化为字节数组然后返回对象的内容。我遇到了类未标记为可序列化的异常。我对这方面的任何想法持开放态度,如果我以错误的方式处理这个问题,请随时这样说。
更新:我需要将这些项目序列化到数据库的原因涉及基因编程实验。基本上你可以改变一个解决方案,或者稍微项目,然后测试这个新改变的程序,然后如果它在测试阶段表现良好,就将这个改变的程序用于后代。不幸的是,将所有这些对象一直保存在内存中有点不切实际。停电是保持这些实体状态的一个很好的理由,还有其他的。所以我不一定需要将这些东西序列化为字节本身,我可以只保存最少量的信息,以便在需要时重建这些对象。但是,我不确定实现最终目标的最有效方法。
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();
}