如何获取protobuf网络序列化程序的非静态实例
本文关键字:程序 序列化 实例 静态 网络 protobuf 何获取 获取 | 更新日期: 2023-09-27 18:25:01
我使用protobuf网络序列化程序,如下所示:
ProtoBuf.Serializer.Serialize(fileStream, data);
如何获得非静态序列化程序实例?我想这样使用它:
var myProtobufNetSerializer = MyProtobufNetSerializerFactory();
myProtobufNetSerializer.Serialize(fileStream, data);
编辑:
protobuf网络的作者Marc Gravell在回答中回答(这个问题)说这是可能的,但我不知道如何。。。
我的重要问题是为什么要这样做?static
方法实际上只是在默认的instanc(也称为RuntimeTypeModel.Default
)上公开v1 API。所以我可以用回答你的问题
TypeModel serializer = RuntimeTypeModel.Default;
然而,这样做几乎没有什么好处——您还可以使用static
方法。然而,如果你想做一些更有趣的事情,那么你可能想要一个自定义模型:
RuntimeTypeModel serializer = RuntimeTypeModel.Create();
// exercise for reader: configure it, store it somewhere, re-use it
由于TypeModel
(或更具体地说:RuntimeTypeModel
)在内部缓存生成的策略,因此不应为所需的每个序列化创建新的TypeModel
。如果不必要地继续这样做,效率会很低,而且会消耗内存。
您可能不想使用默认类型模型的时间:
- 您需要同时支持两种不同的不兼容布局(可能是出于版本控制的原因)
- 您使用的运行时不支持反射发射,并且必须使用预构建的序列化程序类型
- 您正在对库本身进行单元测试
- 可能还有一些我不记得了