什么是编程中的 Serialization 和 Deserialization?

发布: (2026年2月22日 GMT+8 15:25)
8 分钟阅读
原文: Dev.to

Source: Dev.to

如果你正在学习编程,你可能已经见过以下短语:

  • “Serialize this object”
  • “Deserialize the JSON”
  • “Convert object to string”

……这可能会让人感到困惑。

为什么我们需要转换对象?
为什么不能直接使用它们?

别担心——阅读完本文后,你将以最简单的方式理解序列化和反序列化。

1️⃣ 困惑(为何这感觉很难)

你在程序中创建了一个对象。一切运行得很完美。
然后有人说:

  • “把这些数据发送到前端。”
  • “把这个对象保存到文件中。”
  • “把它存入数据库。”
  • “把它发送到另一台服务器。”

于是你突然被告知:“先把它序列化。”

现在你感到害怕。那到底是什么意思?

2️⃣ 为什么会有序列化(真正的问题)

在你的程序中,数据存在于 内存(RAM) 中。

原始内存的问题

  • 程序停止时,内存会消失。
  • 你无法将原始内存发送到另一台计算机。
  • 你不能直接将内存结构存储到文件中。
  • 其他编程语言无法理解你的内部对象格式。

计算机只能理解:

  • 文本
  • 原始字节(0 和 1)

因此,开发者需要一种方法来 将对象转换为可以保存或发送的形式
这种解决方案称为 序列化

当我们把它转换回去时,称为 反序列化

3️⃣ 现实生活类比(超级简单)

想象你组装了一辆 LEGO 车。在你的房间里它已经完整组装好。
现在你想把它寄给住在另一个城市的表兄弟。你不能把完整的车直接寄过去,于是你:

  1. 把它拆成零件。
  2. 把零件装进盒子里。
  3. 寄出盒子。

你的表兄弟收到盒子,打开后重新组装 LEGO 车。

  • 拆分和打包 → 序列化
  • 重新组装 → 反序列化

就是这么简单。没有任何魔法。

4️⃣ 简单解释(无复杂词汇)

  • Serialization = 将对象转换为文本或字节,以便保存或发送。
  • Deserialization = 将该文本或字节转换回原始对象。

简而言之:

Object → Text/Bytes → Object

5️⃣ 序列化是如何工作的(逐步说明)

让我们想象在 Python 中有以下学生数据:

student = {
    "name": "Rahul",
    "age": 15
}

🔹 步骤 1:序列化

将其转换为 JSON(文本格式):

{"name": "Rahul", "age": 15}

现在它只是文本。该文本可以:

  • 保存到文件中
  • 存储在数据库里
  • 通过 API 发送
  • 在不同的编程语言之间共享

🔹 步骤 2:反序列化

当有人收到这段文本时,他们会把它转换回对象:

student = {"name": "Rahul", "age": 15}

现在它再次表现得像一个普通对象。

6️⃣ Very Small Code Example (Python)

序列化示例

import json  # Library to work with JSON

student = {
    "name": "Rahul",
    "age": 15
}

# Convert dictionary to JSON string
serialized_data = json.dumps(student)

print(serialized_data)

输出

{"name": "Rahul", "age": 15}

反序列化示例

# Convert JSON string back to dictionary
original_data = json.loads(serialized_data)

print(original_data["name"])

输出

Rahul

Source:

7️⃣ 干运行(最重要的部分)

让我们慢慢地走过这个过程。

  1. 创建对象

    student = {"name": "Rahul", "age": 15}

    这是一段存储在内存中的字典。

  2. 序列化

    serialized_data = json.dumps(student)

    结果:

    serialized_data = '{"name": "Rahul", "age": 15}'

    重要提示: serialized_data 现在是一个 字符串,而不是字典。
    尝试执行 serialized_data["name"] 会导致错误,因为它只是文本。

  3. 反序列化

    original_data = json.loads(serialized_data)

    现在 original_data 又是字典了,所以 original_data["name"] 可以工作。

完整过程

Object → JSON String → Object

8️⃣ 在真实世界中序列化的使用场景

序列化无处不在:

  • 🌐 前端向后端发送数据
  • 📱 移动应用调用服务器
  • 💾 将数据保存到文件中
  • 🗄️ 在数据库中存储对象
  • 🔐 在微服务之间发送数据
  • 🎮 保存游戏进度
  • 📨 在网络上进行数据传输

每次使用 API 时,序列化都会在幕后悄悄进行。当 Instagram 加载你的个人资料时……序列化和反序列化正默默工作。

9️⃣ 常见初学者错误

  • 认为 JSON 与对象相同 – JSON 是文本;对象存在于内存中。
  • 忘记序列化会把对象转换为字符串 – 你不能直接在字符串上访问属性。
  • 在未反序列化的情况下尝试像字典一样访问 JSON
  • 假设序列化仅指 JSON – 它也可以是 XML、二进制格式、Protocol Buffers 等。

🔟 序列化 vs 反序列化(快速比较)

序列化反序列化
方向对象 → 文本/字节文本/字节 → 对象
发生时间发送或保存之前接收或读取之后
发生地点发送方接收方

1️⃣1️⃣ 何时应该使用序列化?

  • 每当你需要 持久化数据(文件、数据库、缓存)时。
  • 每当你需要在进程、服务或机器之间 通信 时。
  • 当你想要在不同的编程语言或平台之间 共享数据 时。

简而言之,只要数据必须离开当前程序的内存,就需要序列化(以及另一端相应的反序列化)。

使用序列化的情况

  • 您希望将数据发送到其他系统
  • 您希望永久保存对象
  • 您希望不同语言能够理解您的数据
  • 您正在构建 API
  • 您正在使用数据库

如果数据要移出您的程序,就涉及序列化。

1️⃣2️⃣ Quick Revision Summary

  • Serialization = 对象 → 文本/字节
  • Deserialization = 文本/字节 → 对象
  • 用于 发送保存 数据
  • JSON 是最常见的格式
  • 序列化后,数据会变成 字符串
  • 必须在将其作为对象使用前进行反序列化
  • API数据库移动应用服务器 中使用

现在,如果有人说:

“在发送之前先序列化这个对象。”

你不会惊慌。
你只会想:

“哦……我们把它装进盒子里了。”

就这么简单。

0 浏览
Back to Blog

相关文章

阅读更多 »

Undefined 与 Not Defined

Undefined undefined 是 JavaScript 中的一个特殊关键字。它表示变量已经在内存中存在,但尚未被赋值。在创建阶段…