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

时间:2015-11-30 15:26:20

标签: c# protobuf-net

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

ProtoBuf.Serializer.Serialize(fileStream, data);

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

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

编辑:

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

1 个答案:

答案 0 :(得分:3)

我的重要问题是为什么你想这样做? static方法实际上只是在默认实例(即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,因为TypeModel(或更具体地说:RuntimeTypeModel)在内部缓存生成的策略。如果不必要地继续这样做,那将是低效率和耗费内存的。

您可能不想使用默认类型模型的时间:

  • 您需要同时支持2种不同的不兼容布局(可能出于版本控制的原因)
  • 您正在使用不支持reflection-emit的运行时,并且必须使用预先构建的序列化器类型
  • 您正在对库本身进行单元测试
  • 可能是其他一些我不记得
  • 的人