【C#】序列化、反序列化汇总
一、持续序列化对象追加到文件的方法
https://www.cnblogs.com/luxishi/p/9172407.html
二、反序列化时程序集名称不同导致错误
折腾了好久终于解决了这个问题,官方yyds
反序列化代码:
public static bool FileLoad(string Fliepath) { bool res = false; AA = new DataClass(); try { FileStream load_read = File.Open(Fliepath, FileMode.Open, FileAccess.Read, FileShare.None); BinaryFormatter bf = new BinaryFormatter(); bf.Binder = new UBinder(); //关键语句 AA= bf.Deserialize(load_read) as DataClass; load_read.Close(); res = true; } catch (System.Exception ex) { res = false; System.Windows.MessageBox.Show(ex.ToString()); } return res; }
在Class外面添加:
public class UBinder : SerializationBinder { /// <summary> /// 获取反序列化所需的类型 /// </summary> /// <param name="assemblyName">待读取文件的程序集信息</param> /// <param name="typeName">待读取文件的反序列化所需的类型</param> /// <returns></returns> public override Type BindToType(string assemblyName, string typeName) { //例如,当前待读取的二进制文件在程序集AAAA中创建,序列化类型是AAAA.UserClass.Parameter.DataClass //新的程序集名称为BBBB,序列化类型是BBBB.Parameter.DataClass //那么这个函数的输入参数就是 //assemblyName="AAAA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" //typeName="AAAA.UserClass.Parameter+DataClass" Type typeToDeserialize = null; //反序列化所需的类型 String assemVer1 = Assembly.GetExecutingAssembly().FullName;//当前项目的程序集信息 //即assemVer1 = "BBBB, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" String typeVer1 = "AAAA.UserClass.Parameter+DataClass"; if (typeName == typeVer1)//更新typeName { //assemblyName = assemblyName.Replace("1.0.0.0", "2.0.0.0");//如果版本号不同就加上 typeName = "BBBB.Parameter+DataClass"; } typeToDeserialize = Type.GetType(String.Format("{0}, {1}", typeName, assemVer1)); //得到新类型 return typeToDeserialize; } }
/*******相与枕藉乎舟中,不知东方之既白*******/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2020-09-23 【概念】数值转换的潜在问题