动态对象的反序列化问题,说找不到程序集
是这样的,我有这样一个类:
class MyClass{
string assemblyName;
object obj;
}
其中assemblyName是一个编译后类的DLL的名称,obj是根据这个DLL生成的对象。
我的程序是在运行时确定这个assemblyName,然后生成这个对象,并给对象里的属性赋值的。然后将这个对象用二进制序列化存到数据库中。
序列化的代码如下:
public static byte[] serialize(object obj) {
BinaryFormatter binFormatter = new BinaryFormatter();
MemoryStream memStream = new MemoryStream();
byte[] buffer = new byte[0];
binFormatter.Serialize(memStream, obj);
buffer = memStream.ToArray();
return buffer;
}
对对象进行反序列化的代码如下:
public static object deserialize(byte[] buffer) {
object obj = null;
MemoryStream memStream = new MemoryStream(buffer);
BinaryFormatter binFormatter = new BinaryFormatter();
obj = binFormatter.Deserialize(memStream);
return obj;
}
我看过,序列化是没有问题的。可是在反序列的时候,就会出现问题。
因为序列化的时候,是存储了对象的程序集信息的,可是在执行反序列化的这一句时:
obj = binFormatter.Deserialize(memStream);
它就报类似这样的错:
Unable to find assembly ”MyAssemblyNameInDLL, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null“,其中MyAssemblyNameInDLL是随便起的,就是DLL中的程序集名称。这是为什么呢?
我的理解是,它既然在序列化时存储了程序集的相关信息,那在反序列化时就要去读取对应的程序集,可能是从一个特定的位置读取,可是我试过system目录和.net framework的DLL的目录,都不行。有什么解决方法吗?我觉得最好,是能够自己指定程序集的位置,不要从一个特定的位置去读,否则这样太不灵活了。
垦请大家指教,谢谢了。