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