ZBLOG

序列化是什么意思

序列化(Serialization) 是将数据结构或对象转换为一种可以存储或传输的标准化格式(如JSON、XML、二进制等)的过程,目的是在不同系统或程序间共享数据。反序列化(Deserialization)则是将这种格式重新还原为原始数据。


1. 核心概念

  • 序列化:对象 → 标准化格式(如字符串、字节流)。
  • 反序列化:标准化格式 → 对象。

例如:

  1. // C++对象 → JSON字符串(序列化)
  2. nlohmann::json obj = {{"name", "Alice"}, {"age", 30}};
  3. std::string jsonStr = obj.dump(); // 序列化为JSON字符串
  4. // JSON字符串 → C++对象(反序列化)
  5. auto parsedObj = nlohmann::json::parse(jsonStr);

2. 为什么需要序列化?

  • 跨平台传输:网络通信(如HTTP请求)只能传输字节流,需将数据转为JSON/XML等文本或二进制格式。
  • 持久化存储:将对象保存到文件或数据库时需转为通用格式。
  • 语言无关性:不同编程语言可通过JSON/Protocol Buffers等交换数据。

3. 常见序列化方式

格式 特点 示例场景
JSON 易读、跨语言、文本格式 HTTP API交互(如RESTful接口)
XML 标签结构、冗长但灵活 SOAP协议、配置文件
Protocol Buffers 高效二进制、体积小、需预定义Schema gRPC通信、高性能存储
MessagePack 二进制JSON,比JSON更紧凑 IoT设备数据传输

4. C++中的示例(以nlohmann/json库为例)

(1) 序列化

  1. #include <nlohmann/json.hpp>
  2. using json = nlohmann::json;
  3. // 定义一个C++结构体
  4. struct Person {
  5. std::string name;
  6. int age;
  7. };
  8. // 手动序列化
  9. Person p{"Bob", 25};
  10. json j;
  11. j["name"] = p.name;
  12. j["age"] = p.age;
  13. std::string serialized = j.dump(); // {"name":"Bob","age":25}
  14. // 自动序列化(需适配to_json函数)
  15. void to_json(json& j, const Person& p) {
  16. j = json{{"name", p.name}, {"age", p.age}};
  17. }
  18. serialized = json(p).dump(); // 直接转换

(2) 反序列化

  1. std::string jsonStr = R"({"name":"Bob","age":25})";
  2. auto parsedJson = json::parse(jsonStr); // JSON字符串 → json对象
  3. Person p;
  4. p.name = parsedJson["name"].get<std::string>();
  5. p.age = parsedJson["age"].get<int>();
  6. // 自动反序例化(需适配from_json函数)
  7. void from_json(const json& j, Person& p) {
  8. j.at("name").get_to(p.name);
  9. j.at("age").get_to(p.age);
  10. }
  11. p = parsedJson.get<Person>(); // 直接转换

5. curl命令中的序列化

在之前的例子中,curl -d后的JSON字符串是手动编写的序列化数据,而C++代码通过nlohmann::json库自动生成合法JSON字符串。两者最终效果一致,但自动化程度不同。


总结

  • 本质:将内存中的复杂数据“扁平化”为通用格式。
  • 关键点:确保序列化和反序例化的规则一致(如字段名匹配)。
  • 应用场景:API通信、配置文件、缓存存储等。


    内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23389

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?