如何使用protobuf编译的静态序列化DLL?

时间:2014-10-05 14:24:36

标签: c# serialization dll protobuf-net

所以我关注的是当我瞄准AOT平台时不支持动态代码生成。 protobuf-net允许在手动解决问题之前编译序列化器。但我不太确定如何使用这些功能...

所以我创建了一个包含所有类型和成员的RuntimeTypeModel,然后调用model.Compile(name, path); - 确定...如何处理这个生成的dll?包含它并使用它的序列化方法而忘记我的模型对象?或者我可以从同一个模型对象序列化? (即如果我说model.Compile,如果我model.Seiralize,那么模型是否会使用已编译的dll中的序列化器?或者......?)

对这个问题的任何启示都会很棒。我在互联网上找到了位和字节,但没有完整的答案。

1 个答案:

答案 0 :(得分:1)

这取决于:

  • 是否需要跨平台支持
  • 是否需要自定义配置

从问题的角度来看,这听起来像是“不”和“是”。在这种情况下,您应该能够使用接受路径和序列化程序类型名称的Compile重载。这会发出一个可以从项目中引用的DLL;这样做,然后只需使用序列化器类型:

TypeModel serializer = new YourCustomSerializer();

然后有序列化/反序列化等方法。

如果需要跨平台支持,编译工具会更复杂,并且需要使用特殊的构建步骤。最简单的方法是使用“protogen”工具,它使用基于属性的配置。如果您需要跨平台编译自定义配置,您需要编写一个引用 ikvm protobuf-net的小工具(不大);这需要更多解释 - 如果你需要一个例子,请告诉我!