C# BinaryFormatter 反序列化实现方法
本文讲解在 C# 编程中如何利用 BinaryFormatter 从二进制文件反序列化出实体类对象。该方法基于 .NET Framework 的序列化机制,适用于快速进行数据的临时持久化和恢复。
准备条件
- 项目命名空间:示例假设存在一个名为“二进制序列化”的项目,其中定义了待反序列化的实体类(如
People)。 - 引用程序集:必须引用包含实体定义的项目或 DLL,否则运行时无法找到对应的类元数据。
- 二进制文件:需要已存在的反序列化源文件,本例使用
person.bin,该文件应由同一类型的对象序列化而来。
具体操作
第1步:引入必要的命名空间
首先,代码需引用负责序列化、IO 输入输出以及基础字符串处理的核心库:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading.Tasks;
using System.IO;
第2步:实例化序列化器与定义入口
创建 Main 方法作为程序入口,并在内存中初始化 BinaryFormatter 实例。这是一个提供序列化服务的核心对象:
static void Main(string[] args)
{
// 1. 创建 BinaryFormatter 实例
BinaryFormatter bf = new BinaryFormatter();
// 2. 打开现有的二进制文件(此处为 person.bin)
using (FileStream fs = new FileStream("person.bin", FileMode.Open))
{
// ...执行后续反序列化逻辑
}
}
第3步:执行反序列化与类型转换
在使用 FileStream 包裹的操作块内,调用 bf.Deserialize(fs) 读取数据流。该方法返回值是基类 object,因此必须进行强转(显式转换)以恢复为真实的类类型(例如 People):
object obj = bf.Deserialize(fs);
People p = (People)obj; // 强制转换为具体类型
Console.WriteLine("姓名:{0}\t年龄:{1}", p.Name, p.Age);
第4步:清理资源与验证结果
using 语句会自动在代码块结束时关闭文件句柄和释放相关资源。在窗口控制台应用中,通常加上 Console.ReadKey() 以防止控制台退出:
Console.WriteLine("反序列化完毕!");
Console.ReadKey();
}
注意事项
- 安全性警告:在现代开发中,Microsoft 官方强烈不推荐使用
BinaryFormatter,因为它极易受到远程代码执行攻击。建议在新项目中改用System.Text.Json或Newtonsoft.Json。 - 版本兼容性:如果实体类的结构(属性、字段)发生改变且未被标记兼容,反序列化可能会失败。
- 程序集依赖:运行时的进程能够定位到定义
People类的程序集。如果是跨程序集调用,请确保引用了该类所在的工程或其编译后的 DLL。
以上就是 C# 反序列化到类的详细内容,更多关于 C# 序列化资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













