我是编程乐趣,一个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 MessagePack2、定义要被序列化的类
使用 [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 -
推荐阅读