动态加载的Type的SerializationException

时间:2012-02-06 15:15:33

标签: c# .net serialization dynamic dll

由于我之前的问题(XML serialization of interfaces),我又遇到了另一个问题......

我有一个从数据库导出数据的应用程序。导出过程由实现用于调用的公共接口的不同具体类实现。

具体实现作为插件(DLL)加载,所以我不直接在我的代码中引用它们。

我需要将这些具体类的实例序列化为字节数组到我的数据库中,但是现在当我尝试从字节数组中反序列化它时,我获得了SerializationException: Unable to find assembly …

我想这是因为我在运行时使用我的界面的具体实现来加载dll ...

我该如何解决?

注意 我正在使用此代码反序列化对象:

    public static object DeSerialize(byte[] arrayToDeSerialize)
    {
        object serializedObject;
        using (MemoryStream stream = new MemoryStream(arrayToDeSerialize))
        {
            //Creating binary formatter to De-Serialize string.
            BinaryFormatter formatter = new BinaryFormatter();

            //De-Serializing.
            serializedObject = formatter.Deserialize(stream);
        }
        return serializedObject;
    }

1 个答案:

答案 0 :(得分:4)

您可以挂钩AppDomain.AssemblyResolve事件以根据需要加载程序集。每次运行时需要一个无法解析的程序集时,都会引发该事件。它为您提供了最后一次机会,在抛出“无法找到程序集”异常之前提供程序集。示例在我链接的页面上。