C# BinaryFormatter 反序列化实现方法

Ivy
Ivy
发布时间:2026-10-13| 6人浏览过
原创

本文讲解在 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();
}

注意事项

  1. 安全性警告:在现代开发中,Microsoft 官方强烈不推荐使用 BinaryFormatter,因为它极易受到远程代码执行攻击。建议在新项目中改用 System.Text.Json 或 Newtonsoft.Json。
  2. 版本兼容性:如果实体类的结构(属性、字段)发生改变且未被标记兼容,反序列化可能会失败。
  3. 程序集依赖:运行时的进程能够定位到定义 People 类的程序集。如果是跨程序集调用,请确保引用了该类所在的工程或其编译后的 DLL。

以上就是 C# 反序列化到类的详细内容,更多关于 C# 序列化资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。