AutoCSer 的二进制数据序列化是一种通用的高性能数据序列化组件,需要引用 AutoCSer\Packet\*\AutoCSer.dll。

. 默认支持循环引用,由于循环引用支持需要消耗一定的资源,对于确定不会产生循环引用的数据类型可以手动配置禁用支持(此配置只对数据根节点有效)。
循环引用支持也不是一定会降低序列化性能,比如某个大对象被多次引用(非循环引用),如果禁用循环引用支持那么对象将被多次序列化,反序列化以后也不再是同一个对象引用。

循环引用支持 参考示例 AutoCSer\Example\BinarySerialize\Reference.cs
禁用循环引用 参考示例 AutoCSer\Example\BinarySerialize\DisabledReference.cs

. 支持成员选择配置,默认选择所有可见的非匿名字段成员。由于 AutoCSer 在整体结构规划中,字段用于描述数据,属性用于描述计算行为,所以在二进制序列化中默认不支持属性。

仅选择公共字段成员 参考示例 AutoCSer\Example\BinarySerialize\PublicInstanceField.cs
匿名字段绑定属性支持 参考示例 AutoCSer\Example\BinarySerialize\Property.cs
忽略成员 参考示例 AutoCSer\Example\BinarySerialize\IgnoreMember.cs

. 除了成员选择配置,还默认支持临时性的成员位图选择序列化成员。由于成员位图选择支持需要消耗一定的资源,可以手动配置禁用临时性的成员选择。
成员位图选择仅对数据根节点有效,如果需要在子节点中支持成员位图选择,需要自定义成员位图数据对象。

成员位图选择 参考示例 AutoCSer\Example\BinarySerialize\MemberMap.cs
禁用成员位图 参考示例 AutoCSer\Example\BinarySerialize\DisabledMemberMap.cs
成员位图数据对象 参考示例 AutoCSer\Example\BinarySerialize\MemberMapValue.cs

. 为了方便数据类型的抽象重用,默认支持数据基类配置入侵数据派生类型,也就是该数据基类的所有派生类型的序列化处理都默认当成该数据基类处理。

参考示例 AutoCSer\Example\BinarySerialize\BaseType.cs

. 由于二进制序列化对数据结构定义更新不友好,对于非稳定字段数据支持 Json 序列化扩展。

参考示例 AutoCSer\Example\BinarySerialize\Json.cs

. 支持自定义序列化函数,对于引用类型必须是静态函数,对于值类型必须是成员函数,必须同时定义序列化与反序列化两个函数并自行保证序列化数据的可逆性。

引用类型 参考示例 AutoCSer\Example\BinarySerialize\CustomClass.cs
值类型 参考示例 AutoCSer\Example\BinarySerialize\CustomStruct.cs

性能测试项目 AutoCSer\TestCase\SerializePerformance\AutoCSer.TestCase.SerializePerformance