在protobuf.net中进行子类化

时间:2011-02-06 20:56:07

标签: c# .net serialization protobuf-net

我有一个围绕protobuf.net构建的系统,系统公开了一个抽象类(foo),我期望最终用户实现它。抽象类可以通过protobuf.net进行序列化。目前,当我尝试序列化foo的实现时,我收到一个错误:

  

期间发现意外类型   系列化;必须包括类型   使用ProtoIncludeAttribute;发现   酒吧作为foo传递

这是有道理的,我没有告诉系统关于酒吧,所以当我把酒吧作为foo时,它会感到困惑。有没有一种简洁的方法来设置,使得程序员使用我的库做事情很简单(最好只是将字段标记为可正常的protobuf.net使用的可串行字段?

编辑:显然,我不能使用protoinclude,因为这需要修改基础库的源代码。

1 个答案:

答案 0 :(得分:1)

在v1中,必须对基座进行装饰以了解儿童。在v2中,此限制被删除;您可以在运行时创建模型并定义所需的一切。它仍然可以读取属性,这是并排的(如果您愿意,可以在不同类型上使用不同的方法)。

但是,如果调用者不想知道任何血腥细节,您可以选择将RuntimeTypeModel详细信息隐藏在自己的API之后。

v2可以从主干构建,并且非常稳定 - 但是有一些TODO项目 - 主要是边缘情况需要完成才能完全兼容。大多数人都不会看到这些案件。