所以我关注的是当我瞄准AOT平台时不支持动态代码生成。 protobuf-net允许在手动解决问题之前编译序列化器。但我不太确定如何使用这些功能...
所以我创建了一个包含所有类型和成员的RuntimeTypeModel
,然后调用model.Compile(name, path);
- 确定...如何处理这个生成的dll?包含它并使用它的序列化方法而忘记我的模型对象?或者我可以从同一个模型对象序列化? (即如果我说model.Compile
,如果我model.Seiralize
,那么模型是否会使用已编译的dll中的序列化器?或者......?)
对这个问题的任何启示都会很棒。我在互联网上找到了位和字节,但没有完整的答案。
答案 0 :(得分:1)
这取决于:
从问题的角度来看,这听起来像是“不”和“是”。在这种情况下,您应该能够使用接受路径和序列化程序类型名称的Compile
重载。这会发出一个可以从项目中引用的DLL;这样做,然后只需使用序列化器类型:
TypeModel serializer = new YourCustomSerializer();
然后有序列化/反序列化等方法。
如果需要跨平台支持,编译工具会更复杂,并且需要使用特殊的构建步骤。最简单的方法是使用“protogen”工具,它使用基于属性的配置。如果您需要跨平台编译和自定义配置,您需要编写一个引用 ikvm protobuf-net的小工具(不大);这需要更多解释 - 如果你需要一个例子,请告诉我!