C# 序列化与反序列化实战:从对象到文件的完整示例
C# 序列化与反序列化
当对象数据需在应用间移动或跨会话持久化时,序列化与反序列化必不可少。C# 中序列化将对象状态写入存储介质(常为文件),反序列化从存储表示重建对象。
以简单类 Tutorial 为例,包含 ID 和 Name 两属性。将实例序列化到文件,稍后读取文件重建对象,原始数据完好保留。
如何在 C# 中序列化对象
下面分步演示控制台应用中的过程。
- 创建带
ID和Name属性的Tutorial类。 - 实例化类,赋值
ID = 1、Name = ".Net"。 - 将对象序列化到
Example.txt。 - 从文件反序列化对象并在控制台显示值。
将以下代码粘贴到 Program.cs。
步骤 1) 添加类。第一步添加将被序列化的类。

代码解析:
- 类必须标记
[Serializable]特性;否则序列化失败。 - 定义
Tutorial类,两字段:int ID和string Name。
步骤 2) 创建对象并序列化。实例化 Tutorial 对象并写入 Example.txt。

代码解析:
- 创建
Tutorial实例,设ID = 1、Name = ".Net"。 - 实例化
BinaryFormatter(注意:.NET 5+ 中BinaryFormatter已过时;生产代码建议用System.Text.Json或XmlSerializer)。 - 以
FileMode.Create、FileAccess.Write打开FileStream写入二进制数据。 - 调用
formatter.Serialize将对象写入流,关闭流。
步骤 3) 反序列化对象。最后从文件读回数据验证过程。

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace DemoApplication {
[Serializable]
class Tutorial {
public int ID;
public string Name;
static void Main(string[] args) {
Tutorial obj = new Tutorial();
obj.ID = 1;
obj.Name = ".Net";
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("E:\\ExampleNew.txt", FileMode.Create, FileAccess.Write);
formatter.Serialize(stream, obj);
stream.Close();
stream = new FileStream("E:\\ExampleNew.txt", FileMode.Open, FileAccess.Read);
Tutorial objnew = (Tutorial)formatter.Deserialize(stream);
Console.WriteLine(objnew.ID);
Console.WriteLine(objnew.Name);
Console.ReadKey();
}
}
}
代码解析:
- 以读模式打开文件。
- 将二进制数据反序列化回
Tutorial实例。 - 打印
ID和Name到控制台。
在 Visual Studio 运行程序产生输出:
输出:

如图,值正确从文件检索。
总结
序列化将对象数据写入文件,反序列化从文件读回对象。这一基础技术支撑许多 .NET 数据交换场景。
C语言
- C# 类与对象:面向对象编程的基石
- 掌握 C# 抽象类与抽象方法:实战指南
- 理解 C# 分部类与分部方法
- 掌握 C# sealed 类与方法:用法、示例与代码安全性能提升
- C++ 运算符全解析:类型、示例与示例程序
- C++ 类与对象实战指南:封装、构造函数、析构函数与访问控制
- C++ Struct 与 Class 核心差异、语法及最佳实践
- 精通 C# 继承与多态:实战代码示例详解
- C# 抽象类实战教程:从定义到派生的完整代码示例
- 理解 Python type() 与 isinstance():实战示例详解
- 掌握 Java 文件操作:java.io 包下的创建、读取、写入与删除
- Java BufferedReader 读取文件:实战指南与示例