【问题标题】:Serialization of ISolution - Roslyn CTP3ISolution 的序列化 - Roslyn CTP3
【发布时间】:2013-05-21 17:40:56
【问题描述】:

我一直在元编程环境中尝试使用 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();
    }

【问题讨论】:

    标签: .net serialization roslyn binary-deserialization


    【解决方案1】:

    解决方案不可序列化,并且不会很快实现。

    对于您的方案,最好的方法是简单地序列化您已更改文件的新文本。如果您真的想节省空间,您甚至可以存储文本的差异。 Roslyn 中的 SyntaxTrees 可以序列化为二进制流并返回,但我们发现这对于大多数场景来说都是多余的。 SyntaxTrees 已经有一种自然的序列化格式——文本——你可以简单地重新解析以获取结果文本。

    【讨论】:

      猜你喜欢
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      • 2016-02-13
      • 1970-01-01
      相关资源
      最近更新 更多