.NET中比肩System.Text.Json序列化反序列化组件MessagePack

news/2024/11/29 20:42:43/

简介

    官方定义:MessagePack是一种高效的二进制序列化格式。它允许您像JSON一样在多个语言之间交换数据。但是它更快并且更小。    MessagePack是一种开源的序列化反序列化组件,可支持JAVA,C#等主流语言。在 C# 中使用 MessagePack,需要添加 MessagePack-CSharp组件,在.NET6之后直接添加 MessagePack。它支持 .NET Framework、.NET Core 和 Unity 应用程序。它提供了一个简单的 API,可以帮助开发人员在应用程序中快速实现对象的序列化和反序列化。使用 MessagePack组件,可以将对象序列化为二进制数据,这样可以将数据存储在文件或网络中,以便以后使用。也可以将二进制数据反序列化为对象,这样可以在应用程序中轻松地对数据进行操作。
一、使用方法
    新建一个.NET项目,使用Nuget工具添加 MessagePack组件;并在使用的代码页面添加命名空间MessagePack;添加完成之后就可以在这个代码页面使用了。代码如下:

//本文使用是包MessagePack-CSharpusing MessagePack;public void TestMessage(){MyClass message = new MyClass(){Name = "DOTNET小记",Quantity = 100,Anything = new List<object>(new object[] { "欢迎关注公众号DOTNET小记", 2, false, 4.2d, "祝您一路顺风" })};// 序列化byte[] buffer = MessagePackSerializer.Serialize(message, MessagePack.Resolvers.ContractlessStandardResolver.Instance);var json= MessagePackSerializer.ToJson(buffer);// 反序列化MyClass returnMsg = MessagePackSerializer.Deserialize<MyClass>(buffer,MessagePack.Resolvers.ContractlessStandardResolver.Instance);}//类如下     public class MyClass{public string Name { get; set; }public int Quantity { get; set; }public List<object> Anything { get; set; }}

 

二、MessagePack 与 System.Text.Json比较

MessagePack-CSharp 与 System.Text.Json 都是用于序列化和反序列化数据的工具,但它们有一些不同点。

1. 数据大小MessagePack-CSharp 生成的数据通常比 System.Text.Json 生成的数据更小,因为 MessagePack-CSharp 使用了一些压缩技术。这意味着在网络传输和存储上,使用 MessagePack-CSharp 可能会更加有效。

2. 性能MessagePack-CSharp 在序列化和反序列化上的性能通常比 System.Text.Json 更快。这是因为 MessagePack-CSharp 使用了基于二进制的数据格式,而不是基于文本的格式。此外,MessagePack-CSharp 还提供了一些高级选项,例如多线程序列化和反序列化。性能方面有博主测试了这两者的性能,大家可以参考一下,结果图片如下:

 

 

上图方法2和方法4是System.Text.Json的方法,由此可见MessagePack是优于System.Text.Json的。

3. 运行环境支持MessagePack-CSharp 对各种运行环境的支持比 System.Text.Json 更广泛。例如,MessagePack-CSharp 不仅可以在 .NET 和 .NET Core 上运行,还可以在 Unity 和 Xamarin 等其他平台上运行。

4. 数据可读性System.Text.Json 生成的数据通常比 MessagePack-CSharp 生成的数据更易于人类阅读和解码。这是因为 System.Text.Json 使用了 JSON 格式,该格式是一种易于阅读和编写的文本格式。综上所述,选择哪种工具取决于您的具体需求。如果您需要快速的序列化和反序列化速度和小的数据大小,则 MessagePack-CSharp 是一个不错的选择。如果您需要可读性更好的数据并且不太在意性能,则 System.Text.Json 是一个不错的选择。
三、结语

    本文介绍了MessagePack和它在C#的使用,以及它与System.Text.Json的比较,总的来说MessagePack优于System.Text.Json,当然使用的话得根据你的项目情况来定。希望本文能对你有所收获,同时欢迎大家吐槽。

MessagePack官网:https://msgpack.org/     参考:chatGPT


http://www.ppmy.cn/news/55230.html

相关文章

【无人车】用于无人地面车辆的路径跟踪算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Java面试题字节流字符流

String 编码UTF-8 和GBK的区别 GBK编码&#xff1a;是指中国的中文字符&#xff0c;其实它包含了简体中文与繁体中文字符&#xff0c;另外还有一种字符 “gb2312”&#xff0c;这种字符仅能存储简体中文字符。 UTF-8编码&#xff1a;它是一种全国家通过的一种编码&#x…

为什么LC谐振频率附近信号会被放大

这个是LC低通滤波电路&#xff0c; 它的增益曲线是这样的 很多同学不理解为什么谐振频率附近信号会被放大&#xff0c;今天就来聊一聊为什么谐振频率附近信号会被放大。 看到这个LC低通滤波电路&#xff0c;假设输入信号源内阻为Rs&#xff0c;L和C为理想电感和电容&#xff0…

使用Quartz.net + Topshelf完成服务调用

概述&#xff1a; Quartz.NET 是一个开源作业调度库&#xff0c;可用于在 .NET 应用程序中调度和管理作业。它提供了一个灵活而强大的框架&#xff0c;用于调度作业在特定的日期和时间或以固定的时间间隔运行&#xff0c;并且还支持复杂的调度场景&#xff0c;例如 cron 表达式…

Yarn(Yet Another Reource Negotiator)另一个资源协调者

官网引用 总结性 产生的需求 YARN工作逻辑 通用的资源管理系统&#xff0c;为上一层应用提供统一的资源管理和调度。解决集群资源利用率&#xff0c;数据共享&#xff0c;资源管理统一问题&#xff0c;yarn取代Job Tracker角色 组件说明 Client 向RM提交任务&#xff0c;终…

【Vue 基础】尚品汇项目-03-home首页搭建(全局组件与局部组件)

1. 完成三级联动组件&#xff08;全局组件&#xff09; 由于三级联动组件在Home、Search、Detail中都需使用&#xff0c;因此将三级联动组件作为全局组件&#xff0c;这样只需要注册一次&#xff0c;就可以在项目任意地方使用。 新建“home/TypeNav/index.vue”&#xff0c;写…

TiDB Operator 和 Operator Dashboard

TiDB Operator 和 Operator Dashboard V1TiDB Operator概念实现 Operator Dashboard概念实现 V2思路实例代码TiDB ARM OperatorTiDB ARM Operator Dashboard V1 为了演示如何编写 TiDB Operator 和 Operator Dashboard&#xff0c;我们将分别介绍它们的概念和实现。 TiDB Ope…

1 Unix基础知识

1.1 登录 1.1 登录名 登录Unix系统时&#xff0c;要先输入登录名&#xff0c;然后再输入口令。系统再其口令文件&#xff08;/etc/password文件&#xff09;查看登录名。口令文件中的登录项由7个以冒号分隔的字段组成&#xff1a;登录名&#xff0c;加密口令&#xff0c;数字用…