当前位置:首页 > C# > 正文

C# BinaryFormatter 详解(手把手教你实现 .NET 二进制序列化与反序列化)

在 C# 开发中,经常需要将对象保存到文件或通过网络传输。这时,二进制序列化就派上用场了。本文将带你从零开始,深入浅出地掌握 BinaryFormatter 的使用方法,即使是编程小白也能轻松上手!

C# BinaryFormatter 详解(手把手教你实现 .NET 二进制序列化与反序列化)  二进制序列化 序列化教程 对象持久化 第1张

什么是 BinaryFormatter?

BinaryFormatter 是 .NET Framework 中用于将对象图以二进制格式进行序列化和反序列化的类。它属于 System.Runtime.Serialization.Formatters.Binary 命名空间。

通过 C# BinaryFormatter,你可以把一个复杂的对象(包括其所有字段和引用的对象)转换成一串字节,然后保存到磁盘、数据库或通过网络发送。接收方再通过反序列化,还原出原始对象。

使用 BinaryFormatter 的前提条件

要让一个类支持二进制序列化,必须在其上添加 [Serializable] 特性。否则,运行时会抛出异常。

完整示例:序列化与反序列化

下面是一个完整的例子,演示如何使用 .NET 序列化教程中最基础的 BinaryFormatter 功能。

1. 定义可序列化的类

using System;[Serializable]public class Person{    public string Name { get; set; }    public int Age { get; set; }    public string Email { get; set; }    public override string ToString()    {        return $"Name: {Name}, Age: {Age}, Email: {Email}";    }}

2. 序列化对象到文件

using System;using System.IO;using System.Runtime.Serialization.Formatters.Binary;class Program{    static void Main()    {        // 创建对象        var person = new Person        {            Name = "张三",            Age = 30,            Email = "zhangsan@example.com"        };        // 序列化到文件        using (FileStream fs = new FileStream("person.dat", FileMode.Create))        {            BinaryFormatter formatter = new BinaryFormatter();            formatter.Serialize(fs, person);        }        Console.WriteLine("对象已成功序列化到 person.dat 文件。");    }}

3. 从文件反序列化对象

using System;using System.IO;using System.Runtime.Serialization.Formatters.Binary;class Program{    static void Main()    {        Person loadedPerson;        // 从文件反序列化        using (FileStream fs = new FileStream("person.dat", FileMode.Open))        {            BinaryFormatter formatter = new BinaryFormatter();            loadedPerson = (Person)formatter.Deserialize(fs);        }        Console.WriteLine("反序列化结果:");        Console.WriteLine(loadedPerson.ToString());    }}

注意事项与安全警告

⚠️ 重要提示:从 .NET 5 开始,BinaryFormatter 在某些平台(如 .NET Core 和 .NET 5+)中已被标记为过时,并且默认被禁用,因为它存在严重的安全风险(如反序列化漏洞)。微软官方建议使用更安全的替代方案,例如 System.Text.JsonNewtonsoft.Jsonprotobuf-net

但在学习或维护旧版 .NET Framework 项目时,了解 C# 对象持久化 的经典方式仍然很有价值。

总结

通过本教程,你已经掌握了如何使用 BinaryFormatter 实现 C# BinaryFormatter 二进制序列化的基本操作。虽然它在现代 .NET 开发中不再推荐使用,但理解其原理有助于你更好地掌握 .NET 序列化教程中的核心概念。

如果你正在开发新项目,请优先考虑 JSON 或其他安全的序列化方式。但对于遗留系统维护或考试学习,这份 C# 对象持久化 指南依然非常实用!

希望这篇教程对你有帮助!欢迎收藏并分享给更多 C# 初学者。