MessagePack-CSharp:.Net高性能序列化压缩开源库!

在我们项目开发中,序列化是经常使用JSON格式,但对于一些对性能、存储有要高要求的系统,我们就会考虑二进制形式。
下面推荐一个二进制序列化格式的开源库,以满足低存储的需求。

01
项目简介

MessagePack-CSharp是一个兼容各个平台(包括 .NET、.NET Core、Unity 和 Xamarin)的非常快速的消息包序列化器。支持了高效的方法来序列化和反序列化数据,特别适合于游戏、分布式计算、微服务或数据缓存等对性能要求较高的应用程序。
该项目有如下特点:
1、性能: MessagePack for C# 序列化器的速度是 MsgPack-Cli 的 10 倍,并且在性能上超越了其他 C# 序列化器。
2、紧凑的二进制格式: 采用二进制格式,相对比JSON、XML等格式,更加紧凑和高效。
3、LZ4 压缩支持: 内置了对 LZ4 压缩算法的支持,这是一种极其快速的压缩算法。
4、丰富的 API: 提供了高级 API(MessagePackSerializer)、低级 API(IMessagePackFormatter)和原始 API(MessagePackWriter、MessagePackReader)。
5、类型安全和灵活性: 支持对象序列化,包括 DataContract 兼容性、只读/不可变对象成员序列化、联合类型等。
6、安全性: 提供了对反序列化时安全性的考虑,可以配置安全选项以降低执行任意代码或拒绝服务攻击的风险。
7、扩展性: 支持通过扩展包来扩展序列化支持,例如 ReactiveProperty、Unity 特定类型等。
8、Unity 和 Xamarin 的 AOT 代码生成支持: 针对 Unity 和 Xamarin 等平台提供了 AOT(Ahead Of Time)编译支持。
9、平台支持: 支持 .NET Standard 2.0,并对 .NET Core 2.1+ 进行了特别优化,兼容大多数较新的 .NET 运行时环境。

02
使用方法

1、安装依赖库
Install-Package MessagePack
2、定义要被序列化的类
使用 [MessagePackObject] 属性对其进行标注。类成员使用 [Key] 属性标注,以指定序列化时使用的键。
[MessagePackObject]
public class MyClass
{
[Key(0)]
public int Age { get; set; }

[Key(1)]
public string FirstName { get; set; }

[Key(2)]
public string LastName { get; set; }

// 所有不需要序列化的字段或属性应该使用 [IgnoreMember] 属性标注
[IgnoreMember]
public string FullName => FirstName + LastName;

}
3、使用 MessagePackSerializer 类来序列化和反序列化对象实例
using MessagePack;
// 创建 MyClass 的实例并设置属性
var mc = new MyClass
{
Age = 99,
FirstName = “hoge”,
LastName = “huga”,
};

// 序列化对象到 byte 数组
byte[] bytes = MessagePackSerializer.Serialize(mc);

// 反序列化 byte 数组回 MyClass 对象
MyClass mc2 = MessagePackSerializer.Deserialize(bytes);

// 将 MessagePack 二进制 blob 转换为人类可读的 JSON 表示形式
// 使用索引键(与字符串键相对)将序列化为 MessagePack 数组,
// 因此属性名称不可用。[99,”hoge”,”huga”]
var json = MessagePackSerializer.ConvertToJson(bytes);
Console.WriteLine(json);

03
项目地址

https://github.com/MessagePack-CSharp/MessagePack-CSharp
最后推荐加入我的 知识星球,里面包含7个教程,其中有:《三层架构教程》与《DDD领域驱动设计架构教程》。

  • End –
    分享一套.NetCore从入门到精通视频教程
    点击下方公众号卡片,关注我
    回复“888”,免费领取

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/419915.html

(0)
联系我们
联系我们
分享本页
返回顶部