如何获取 protobuf-net 序列化器非静态实例?

How to get protobuf-net serializer nonstatic instance?

我这样使用 protobuf-net 序列化程序:

ProtoBuf.Serializer.Serialize(fileStream, data);

如何获取非静态序列化程序实例?我想像这样使用它:

var myProtobufNetSerializer = MyProtobufNetSerializerFactory();
myProtobufNetSerializer.Serialize(fileStream, data);

编辑:

protobuf-net 的作者 Marc Gravell 回复了(this question) in his answer that it's possible,但我找不到如何...

我的重要问题是为什么你想这样做? static 方法实际上只是在默认实例上公开 v1 API,又名 RuntimeTypeModel.Default。所以我可以回答你的问题:

TypeModel serializer = RuntimeTypeModel.Default;

但是,这样做几乎没有什么好处 - 您不妨使用 static 方法。但是,如果您想做一些更有趣的事情,那么您可能需要一个自定义模型:

RuntimeTypeModel serializer = RuntimeTypeModel.Create();
// exercise for reader: configure it, store it somewhere, re-use it

你应该为每个需要的序列化创建一个新的TypeModel,因为TypeModel(或者更具体地说:RuntimeTypeModel)缓存内部生成的策略。不必要地继续这样做会效率低下并且会消耗内存。

您可能不想使用默认类型模型的次数:

  • 您需要同时支持 2 种不同的不兼容布局(可能出于版本控制原因)
  • 您正在使用不支持反射发射的运行时,并且必须使用预构建的序列化程序类型
  • 您正在对库本身进行单元测试
  • 可能还有一些我不记得了