开源!一款功能强大的高性能二进制序列化器Bssom.Net (3)

因为IDictionaryResolver和ICollectionResolver中定义的足够抽象的规则,Bssom.Net不需要为未来.NET可能出现的新的IDictionary或IColloction实现而编写特定的解析代码.

在Bssom.Net中可以通过BssomSerializerOptions中的FormatterResolver属性来注入序列化所需要的解析器, 默认为CompositedResolver, CompositedResolver将会对类型依次从 Object,Primitive,Attribute,BssomValue,BuildIn,IDictionary,ICollection,MapCodeGen解析器中进行查找, 直到找到对应的解析器.

5.扩展

让我们看一下Bssom.Net序列化的过程:

input T -> Call serialize(T) -> Find BssomResolver -> Provide type formatter -> formatter.Serialize(T);

在整个序列化的过程中, 每个步骤都是透明的, 这意味着若用户对Bssom.Net内部定义的解析器或格式化器不满意的话, 则可以自己扩展它.

用户可以自己通过实现IFormatterResolver和IBssomFormatter来替代默认的解析器, 在Bssom.Serializer.Binary.BssomBinaryPrimitives(在即将到来的小版本中将重构该类)和读写器本身所暴露的公开API中提供对Bssom格式的低级写入和读取实现.

简单示例可以参考

6.高级API BssomSerializer

BssomSerializer是Bssom最上层的API, 在Bssom.Serializer命名空间下, 是Bssom开始工作的入口. 它的静态方法构成了Bssom.Net的主要API.

API 描述 重载
Size   在不进行序列化的情况下, 获取对象被序列化后的二进制数据大小   (t, option),(ref context, t)  
Serialize   将给定的值序列化为Bssom二进制   (byte[], t, option), (stream, t, option), (IBssomBufWriter, t, option), (ref context, t)  
Deserialize   将Bssom二进制数据反序列化成.net对象   (byte[], option),(stream, option),(IBssomBuf, option),(ref context)  
SerializeAsync   异步的序列化给定的值为Bssom二进制   同上  
DeserializeAsync   异步的将Bssom二进制数据反序列化成.net对象   同上  
BssomSerializerOptions

BssomSerializer作为最上层的API,我们在调用它时,需要传递一个可空的BssomSerializerOptions类型的Option参数.
BssomSerializerOptions是Bssom在整个序列化工作期间所需要使用的配置. 默认为BssomSerializerOptions.Default.

FormatterResolver : 在Option中,你可以为FormatterResolver注册解析器, 如果没有手动注册, 则使用默认的CompositedResolver, Bssom将总是通过FormatterResolver来对类型进行解析.

Security : 这是用于序列化期间的安全相关选项, 目前仅提供了在反序列化期间对深度的验证,默认为 不限制

IsPriorityToDeserializeObjectAsBssomValue : 该选项决定了反序列化时是否将Object类型转换为BssomValue类型, 如果为false, 则默认反序列化为原生类型. 默认为false.

IsUseStandardDateTime : Bssom.Net对DateTime类型实现了标准的Bssom协议Unix格式.NET平台的本地格式, 本地格式具有更少的字节, 但不具备和其它平台的交互性, 默认为false.

IDictionaryIsSerializeMap1Type : 此选项决定了对具有IDictionary行为的类型默认使用哪种格式进行序列化, 如果为true则使用Map1格式, 否则为Map2格式. 默认为true

BssomSerializeContext

BssomSerializeContext提供了序列化期间所使用的上下文信息, 这其中也包括了BssomSerializerOptions

BssomSerializerOptions : 序列化期间所使用的配置信息

ContextDataSlots : 提供了一个数据槽, 供用户在序列化期间自己存储和读取的一个存储介质

CancellationToken : 一个序列化操作取消的标记, 用户可以中途取消正在进行的序列化操作

7.字段编组

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwxfj.html