C#中泛型集合List<T>反序列化问题及解决方法

本文探讨了在C#中遇到的反序列化问题,特别是针对泛型集合List<T>。当A软件序列化数据文件供B软件使用时,由于程序集名称不同,反序列化会抛出异常。解决方法包括在反序列化时更改类型查找的程序集名。对于泛型List<T>,由于.NET框架在mscorlib中查找类型,可以派生LocalizedTypeGetter并重写BindToType()方法,专门处理List<T>的反序列化。这种方法已在特定环境下成功调试通过。
摘要由CSDN通过智能技术生成

一、一般类型的反序列化程序集问题及处理方法

         在一些应用系统中常常有两个子系统软件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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值