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

玩点科技新鲜事 2024-08-10 15:32:44

我是编程乐趣,一个10年.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<T>)和原始 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 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<MyClass>(bytes);// 将 MessagePack 二进制 blob 转换为人类可读的 JSON 表示形式// 使用索引键(与字符串键相对)将序列化为 MessagePack 数组,// 因此属性名称不可用。[99,"hoge","huga"]var json = MessagePackSerializer.ConvertToJson(bytes);Console.WriteLine(json);

03

项目地址

https://github.com/MessagePack-CSharp/MessagePack-CSharp

- End -

推荐阅读

0 阅读:0

玩点科技新鲜事

简介:感谢大家的关注