一、一般类型的反序列化程序集问题及处理方法
在一些应用系统中常常有两个子系统软件A与B:A软件序列化一个数据文件,该文件将在B软件中使用。例如,在15年的交通运输部小样本调查数据的审核软件中,A软件就是笔者自己用的审核规则编制软件;B软件则是给用户使用的审核小样本调查数据的客户端软件,该软件只需要使用A软件发布的规则即可。笔者的处理方法是,A软件序列化审核规则DataTable到一个文件中,B软件反序列化该文件后直接使用。
一般情况下,A软件序列化类型对象时,将写入类型的名称,且该名称包含了程序集的名字(注意,这个是关键),并且B软件通常不与A软件的程序集名相同。因此,在反序列化时将抛出:“处理的异常: System.Runtime.Serialization.SerializationException: 无法找到程序集“ConsoleApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”。这里的异常信息中的ConsoleApplication1就是A软件的程序集名。这类异常的解决方法是:在反序列化时,更改类型查找的程序集名。具体代码如下:
using (FileStream fs = new FileStream("student.dat", FileMode.Open, FileAccess.Read))
{
BinaryFormatter bf = new BinaryFormatter();
bf.Binder = new LocalizedTypeGetter(); // 保证在当前程序集中获取反序列化的类型
Student