Xml,Json,Protobuffer等序列化的区别。如何选型

Xml,Json,Protobuffer等序列化的区别。如何选型

序列化:将对象转换为字节序列的过程称为对象的序列化;

反序列化:将字节序列恢复为对象的过程称为对象的反序列化;

什么时候需要序列化?

当你需要把内存中的对象保存到一个文件中、数据库中、或者通过网络传输的时候

如何序列化?

主流序列化协议:xml、json、protobuf

以C# 类对象为例

csharp 复制代码
public class Parameter
{
    public int Number { get; set; }
}

public class Root
{
    public int BuildTarget { get; set; }
    public string BuildResultHash { get; set; }
    public int BuildType { get; set; }
    public Parameter Parameter { get; set; }
}

// 实例化 Root
Root root = new Root();
root.BuildTarget = 19;
root.BuildResultHash = "917306b00a02cd400740cff00f554561";
root.BuildType = 0;

root.Parameter = new Parameter();
root.Parameter.Number = 50;

Root 序列后数据格式如下

XML 格式如下

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<o>
     <BuildResultHash type="string">917306b00a02cd400740cff00f554561</BuildResultHash>
     <BuildTarget type="number">19</BuildTarget>
     <BuildType type="number">0</BuildType>
     <Parameter class="object">
          <Number type="number">50</number>
     </Parameter>
</o>

Json 格式如下

csharp 复制代码
{
	"BuildTarget": 19,
	"BuildResultHash": "917306b00a02cd400740cff00f554561",
	"BuildType": 0,
	"Parameter": {
		"Number": 50
	}
}

Proto 格式如下

csharp 复制代码
40 8 19 18 32 57 49 55 51 48 54 98 48 48 97 48 50 99 100 52 48 48 55 52 48 99 102 102 48 48 102 53 53 52 53 54 49 34 2 8 50

XML 简介

XML 被设计用来传输和存储数据。

XML 指可扩展标记语言(eXtensible Markup Language)。

可扩展标记语言(英语:Extensible Markup Language,简称:XML)是一种标记语言,是从标准通用标记语言(SGML)中简化修改出来的。以文本结构进行存储。它可以用来标记数据、定义数据类型,提供统一的方法来描述和交换,而且独立于程序语言或供应商的结构化数据。xml有丰富的编码工具,比如DOM、SAX等。xml的解析方式有两种:

Json 简介

JSON(JavaScript Object Notation,JavaScript对象表示法)是基于ECMAScript的一个子集设计的,是一种开放标准的文件格式和数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。JSON独立于语言设计,很多编程语言都支持JSON格式的数据交换。JSON是一种常用的数据格式,在电子数据交换中有多种用途,包括与服务器之间的Web应用程序的数据交换。其简洁和清晰的层次结构有效地提升了网络传输效率,使其成为理想的数据交换语言。其文件通常使用扩展名.json。

Protobuf 简介

协议缓冲区(又名 protobuf)是 Google 的语言中立、平台中立、可扩展的结构化数据序列化机制。类似 XML,但更小、更快、更简单)。

以二进制结构进行存储,可以用于结构化数据串行化,或者序列化

可用于通讯协议、数据存储等领域

与语言无关、平台无关、可扩展的序列化结构数据格式

您只需定义一次数据的结构,然后就可以使用专门生成的源代码轻松地将结构化数据写入各种数据流并使用各种语言读取数据

您可以在 protobuf 的文档 中了解更多信息。

Json 比 XML 更小、更快、更易解析

Protobuf 优点:

1.二进制结构存储,效率高,序列化体积比 Json 和 Xml 更小,更加灵活

2.格式规范,支持 RPC

3.易于使用,开发人员可以按照一定的语法定义结构化的消息格式,然后发送给命令行工具,工具将自动生成相关语言的类,支持 Java、C++、C#等多种语言环境。通过把生成的类包含在项目中,可以轻松的调用相关方法来完成业务消息的序列化和反序列化

Protobuf缺点:

1.可读性低

相关推荐
ShiXZ21312 小时前
PDF-OCR文件识别篇(七):数据入库
java·pdf·json·ocr·springboot
bloxed16 小时前
大模型应用-筑基期【11:JSON结构化输出实战】
json·大模型应用
脑子运行超载2 天前
Jackson处理和mybatis的xml转换问题
xml·jackson·mybatis·javatype
Venuslite7 天前
从 Unexpected token < 到 Extra data:一次讲清 JSON 解析错误的排查思路
json
疯狂SQL13 天前
手写高性能在线 JSON 工具|Web Worker 工程化打包 + 语法自动修复 + 多语言代码生成实战
typescript·json·next.js·web worker·前端性能优化·esbuild·源码实战
tianyuanwo18 天前
深入解析 RISC-V 虚拟化中的 UEFI 固件配置:从 XML 到 NVRAM 的生命周期管理
xml·linux·risc-v
terry60018 天前
5G视频短信服务商选型全攻略:通道资源、架构能力与成本评估2026最新标准
大数据·人工智能·5g·json·asp.net·信息与通信·数据库架构
前网易架构师-高司机18 天前
带标注的辣椒病叶数据集,识别率95.9%,可识别三种病害和健康叶子,9916张图,支持yolo,coco json,voc xml,文末有模型训练代码
yolo·json·数据集·病害·叶病·病叶·辣椒
PixelBai18 天前
JSON扁平化使用教程:从入门到精通
json