.NET中比肩System.Text.Json序列化反序列化组件MessagePack
简介
官方定义: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
相关文章:
.NET中比肩System.Text.Json序列化反序列化组件MessagePack
简介 官方定义:MessagePack是一种高效的二进制序列化格式。它允许您像JSON一样在多个语言之间交换数据。但是它更快并且更小。 MessagePack是一种开源的序列化反序列化组件,可支持JAVA,C#等主流语言。在 C# 中使用 MessagePack,…...
Oracle删除列操作:逻辑删除和物理删除
概念 逻辑删除:逻辑删除并不是真正的删除,而是将表中列所对应的状态字段(status)做修改操作,实际上并未删除目标列数据或恢复这些列占用的磁盘空间。比如0是未删除,1是删除。在逻辑上数据是被删除了&#…...
找出字符串中第一个匹配项的下标、求解方程----2023/5/2
找出字符串中第一个匹配项的下标、求解方程----2023/5/2 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1…...
23:宁以non-member、non-friend替换member函数
想象有个class用来表示网页浏览器。这样的class可能提供的众多函数中,有一些用来清除下载元素高速缓存区、清除访问过的URLs的历史记录、以及移除系统中的所有cookies: class WebBrowser{ public:void clearCache();void clearHistory();void removeCoo…...
Centos7安装Redis
一、安装gcc依赖 由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(gcc -v),如果没有安装,执行以下命令进行安装 [rootlocalhost local]# yum install -y gcc 二、下载并解压安装包 [rootlocalhost l…...
Android 项目必备(四十五)-->2023 年如何构建 Android 应用程序
Android 是什么 Android 是一种基于 Linux 内核并由 Google 开发的开源操作系统。它用于各种设备包括智能手机、平板电脑、电视和智能手表。 目前,Android 是世界上移动设备使用最多的操作系统; 根据 statcounter 的一份最近 12 个月的样本报告;Android 的市场份额…...
改进YOLOv5: | 涨点神器 | 即插即用| ICLR 2022!Intel提出ODConv:即插即用的动态卷积
OMNI-DIMENSIONAL DYNAMIC CONVOLUTION ODConv实验核心代码ODConv代码yaml文件运行:论文链接: https://openreview.net/forum?id=DmpCfq6Mg39 本文介绍了一篇动态卷积的工作:ODConv,其通过并行策略采用多维注意力机制沿核空间的四个维度学习互补性注意力。作为一种“即插…...
( 数组和矩阵) 485. 最大连续 1 的个数 ——【Leetcode每日一题】
❓485. 最大连续 1 的个数 难度:简单 给定一个二进制数组 nums , 计算其中最大连续 1 的个数。 示例 1: 输入:nums [1,1,0,1,1,1] 输出:3 解释:开头的两位和最后的三位都是连续 1 ,所以最大…...
从0搭建Vue3组件库(十一): 集成项目的编程规范工具链(ESlint+Prettier+Stylelint)
欲先善其事,必先利其器。一个好的项目是必须要有一个统一的规范,比如代码规范,样式规范以及代码提交规范等。统一的代码规范旨在增强团队开发协作、提高代码质量和打造开发基石,所以每个人必须严格遵守。 本篇文章将引入 ESLintPrettierStylelint 来对代码规范化。 ESlint ES…...
Mysql 苞米豆 多数据源 读写分离(小项目可用)
目录 0 课程视频 1 配置 1.1 加依赖 1.2 yml 配置文件 -> druid配置后报错 搞不定 2 代码 2.1 实体类 2.2 mapper -> 调用操作数据库方法 操作数据库 2.3 service -> 指定数据源 -> 用Mapper 接口 -> 操作数据库 2.4 controller -> 用户使用接口 -&…...
OJ练习第90题——删除字符使频率相同
删除字符使频率相同 力扣链接:2423. 删除字符使频率相同 题目描述 给你一个下标从 0 开始的字符串 word ,字符串只包含小写英文字母。你需要选择 一个 下标并 删除 下标处的字符,使得 word 中剩余每个字母出现 频率 相同。 如果删除一个字…...
云原生Istio基本介绍
目录 1 什么是Istio2 Istio特征2.1 连接2.2 安全2.3 策略2.4 观察 3 Istio与服务治理3.1服务治理的三种形态 4 Istio与Kubernetes4.1 Kubernetes介绍4.2 Istio是Kubernetes的好帮手4.3 Kubernetes是Istio的好基座 5 Istio与服务网格5.1 时代选择服务网格5.2 服务网格选择Istio …...
Vue(简单了解Cookie、生命周期)
一、了解Cookie 类似于对象响应携带数据 输入用户名密码跳转到指定页面 点击指定页面中其中一个按钮跳转到另一个指定页面(再不需用输入用户名密码) 例如现在很多浏览器实现七天免密登录 简单理解:就是在网站登录页面之后,服务…...
57.网页设计图标实战
首先我们需要找一个图标库,本次演示采用的是heroicon ● 之后我们根据需求搜索与之想匹配的图标并复制svg代码 ● 之后将我们的代码复制到我们想要放置图标的地方 ● 当然我们需要使用CSS来修饰一下 .features-icon {stroke: #087f5b;width: 32px;height: 3…...
浅析AI视频智能检测技术在城市管理中的场景应用
随着中国的城市建设和发展日益加快,城镇化过程中重建设、轻管理模式带来不少管理难点,传统城管模式存在违法问题多样、缺乏源头治理、业务协同难、取证手段单一等,人员不足问题进一步加剧管理难度。随着移动互联网、物联网、云计算、大数据、…...
unity中的Line Renderer
介绍 unity中的Line Renderer 方法 首先,Line Renderer 是 Unity 引擎中的一个组件,它可以生成直线、曲线等形状,并且在场景中呈现。通常情况下,Line Renderer 被用来实现轨迹、路径、线框渲染以及射线可视化等功能。 在使用 …...
【数据架构系列-06】一文搞懂数据模型的3中类型——概念模型、逻辑模型、物理模型
数据模型就是模拟现实世界的方法论,是通向智慧世界的基石! 从现实世界发展到智慧世界,要数经历现实世界、信息世界、计算机世界、数据世界、智慧世界五个不同的世界,我们天生具有从混沌的世界抽象信息变为信息世界的能力ÿ…...
Java——Java面向对象
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架。 概述: Java是面向对象的程序…...
MyBatis:生命周期、作用域、结果集映射 ResultMap、日志、分页、使用注解开发、Lombok
文章目录 MyBatis:Day 02一、生命周期和作用域二、结果集映射:ResultMap三、日志工厂1. 标准日志:STDOUT_LOGGING2. LOG4J 四、分页五、使用注解开发六、Lombok注意: MyBatis:Day 02 一、生命周期和作用域 理解不同作…...
PostgreSQL安装和开启SSL加密连接【配置双向认证】
SSL单向认证和双向认证: SSL单向认证:只有一端校验对端的证书合法性,通常都是客户端来校验服务器的合法性。即在一般的单向认证中,只要求服务器端部署了ssl证书就行,客户端可以无证书,任何用户都可以去访问…...
千问3.5-2B博物馆导览:展品图理解、说明牌OCR与个性化讲解生成
千问3.5-2B博物馆导览:展品图理解、说明牌OCR与个性化讲解生成 1. 博物馆导览新体验 想象一下,当你站在博物馆的展品前,只需用手机拍下展品照片,就能立即获得专业的讲解内容、展品背景故事,甚至还能根据你的兴趣偏好…...
实战演练:在快马平台用codex生成一个完整的react用户管理组件
今天想和大家分享一个实战案例:如何在InsCode(快马)平台用Codex快速生成一个React用户管理组件。整个过程比我预想的顺畅很多,特别适合需要快速原型开发的场景。 项目需求拆解 用户管理是后台系统的标配功能,这次要实现三个核心模块ÿ…...
XposedRimetHelper:如何优雅解决远程办公的定位打卡难题?[特殊字符]
XposedRimetHelper:如何优雅解决远程办公的定位打卡难题?🚀 【免费下载链接】XposedRimetHelper Xposed 钉钉辅助模块,暂时实现模拟位置。 项目地址: https://gitcode.com/gh_mirrors/xp/XposedRimetHelper 面对企业日益严…...
Python MCP服务端框架源码剖析(2024最新LTS版内核解密)
第一章:Python MCP服务端框架源码剖析(2024最新LTS版内核解密)Python MCP(Modular Control Protocol)服务端框架2024 LTS版标志着其架构从单体调度向轻量级异步模块总线的重大演进。该版本基于 Python 3.11 构建&#…...
手把手教你用DuckDB 1.3.0的DuckLake功能搭建数据湖(PostgreSQL+MinIO实战)
实战指南:基于DuckDB 1.3.0与MinIO构建企业级数据湖架构 在数据驱动的时代,企业需要更灵活、高效的解决方案来管理海量数据。DuckDB 1.3.0推出的DuckLake功能,结合PostgreSQL的元数据管理能力和MinIO的对象存储优势,为中小型企业…...
掌握TegraRcmGUI:从入门到精通的Switch注入实践指南
掌握TegraRcmGUI:从入门到精通的Switch注入实践指南 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI TegraRcmGUI是一款基于C开发的图形化界面工具…...
NHSE完全指南:3步掌握动物森友会存档编辑器的核心功能
NHSE完全指南:3步掌握动物森友会存档编辑器的核心功能 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE NHSE(Animal Crossing: New Horizons Save Editor)是一款…...
Translategemma-27b-it与OCR结合:图片翻译完整流程
Translategemma-27b-it与OCR结合:图片翻译完整流程 1. 引言 想象一下这样的场景:你在异国旅行时看到一份精美的菜单,却因为语言障碍而不知道点什么;或者在研究国外产品时,标签上的说明文字完全看不懂。传统的翻译工具…...
Pixel Aurora Engine实战落地:为像素RPG自动生成NPC对话头像与场景贴图
Pixel Aurora Engine实战落地:为像素RPG自动生成NPC对话头像与场景贴图 1. 像素游戏开发者的新利器 想象一下这样的场景:你正在开发一款像素风格的RPG游戏,需要为上百个NPC设计独特的对话头像,还要制作大量场景贴图。传统方法下…...
基于 SpringBoot 的自助图书借阅管理系统源码讲解
以下是一个基于 SpringBoot 的自助图书借阅管理系统的 核心源码讲解,涵盖用户管理、图书管理、借阅管理、设备对接等关键模块,代码结构清晰,可直接用于学习或二次开发。一、项目结构src/main/java/com/library/ ├── config/ # 配…...
