Ceras 是一个二进制序列化器。它将任何对象转换为byte[]
并返回。它在功能、速度和舒适度方面都超越了我们。支持引用循环、大型/复杂的继承链、将对象拆分为多个部分......
类 Person { 公共字符串名称;公共 int 年龄; }var p = new Person { Name = "riki", Age = 5 };var ceras = new CerasSerializer();var bytes = ceras.Serialize(p);
>> 代码教程中有更多示例
>> 具体场景的详细指南见我的博客
>> 阅读“优化和使用陷阱”
>> 变更日志 v3.0 (rikidev.com/new-features-in-ceras-3-0-2)
>> v4.0 中的新功能 (https://github.com/rikimaru0345/Ceras/releases/tag/4.0)
非常快、小的二进制输出(参见性能)
几乎支持任何类型:
适用于所有常见 .NET 类型的手写格式化程序
附带适用于所有常见 Unity 类型的格式化程序
在运行时为任何新/用户类型生成新的格式化程序
非常容易扩展和定制
完全支持引用持久性(包括循环引用!)
全面支持多态/继承/接口
可以将对象序列化为“ExtenalObjects”部分(在许多场景中很有用)
自动版本容错,无需在您的类上放置任何属性!
完整的功能列表(和计划的功能)
Ceras 通常与 NetSerializer 和 MessagePack-CSharp 一起处于性能范围的顶端。要了解 Ceras 的表现,请查看初步基准测试结果。生成的二进制大小与 MessagePack-CSharp 大致相同。
显示的结果是从此代码中获得的,我鼓励您不仅自己尝试,而且还提供有关您获得好的和坏的结果的场景的反馈。
不要忘记根据您的具体情况调整SerializerConfig
中的设置。使用 Ceras 读取/写入网络数据包可能需要不同的设置,比方说,将设置对象保存到文件,或在游戏中保留项目/咒语/怪物,或者...
该项目仍在大量进行中,这意味着随着时间的推移,将会实施更多优化(您的反馈在这里很重要!)。
主要目标是制作一个可在各种情况下使用的通用序列化器。就我个人而言,我的主要意图是简单的对象持久性和网络通信。随着时间的推移,我添加了许多功能,只要有人能想到一个应该得到支持的好方案,我就会实现它。
示例:
设置:将对象快速保存到磁盘,没有太多麻烦:设置,保存游戏,无论是什么。几乎零配置。请参阅使用指南中的步骤 1 和 2
拆分:所以您的Person
引用了其他Person
对象,但每个对象都应该单独序列化!? (没有参考文献很快就会拖入整个程序)。也许您希望能够将每个Person
放入自己的文件中,或者根据需要通过网络将它们一一发送?没问题!使用IExternalRootObject
这不是问题!请参阅外部对象指南(游戏数据库示例))。
网络:由于其简单的 API 和大量的功能,Ceras 非常适合为您实施完整的“网络协议”。我写了一个简短的指南,展示了基本的 TCP 实现的样子:Just Send(myObject);
它,然后var obj = await Receive();
另一边,就是这样!确实没有比这更容易的了。目前该指南只有 2 部分,但是当我有了一些部分(并且如果有要求)时,我想继续该系列,最终将该示例构建为成熟、强大且经过实战检验的网络系统。
更多:以上只是示例,Ceras 的设计使其可以在几乎所有情况下使用......
如果您出于某种原因需要人类可读的输出。例如,您希望能够在文本编辑器中编辑某些文件。对于这些用途,JSON 或 XML 可能更适合。
您计划在不支持代码生成的平台上使用它。用户类型的序列化器是在运行时通过代码生成创建的。如果不允许(例如在 iOS 上),Ceras 将无法生成任意对象格式化程序。不过,内置类型仍然可以工作。有一些方法可以解决这个问题...(预先生成格式化程序) Ceras 现在在配置中有一个专用的AotMode
以及一个用于 IL2CPP/Unity/AoT 的代码生成器(此处的快速指南)。
打开一个问题
加入我的 Discord(可能是直接一对一帮助的最佳选择)
确保您已阅读常见问题解答和优化与陷阱