我有一个围绕protobuf.net构建的系统,系统公开了一个抽象类(foo),我期望最终用户实现它。抽象类可以通过protobuf.net进行序列化。目前,当我尝试序列化foo的实现时,我收到一个错误:
期间发现意外类型 系列化;必须包括类型 使用ProtoIncludeAttribute;发现 酒吧作为foo传递
这是有道理的,我没有告诉系统关于酒吧,所以当我把酒吧作为foo时,它会感到困惑。有没有一种简洁的方法来设置,使得程序员使用我的库做事情很简单(最好只是将字段标记为可正常的protobuf.net使用的可串行字段?
编辑:显然,我不能使用protoinclude,因为这需要修改基础库的源代码。
答案 0 :(得分:1)
在v1中,必须对基座进行装饰以了解儿童。在v2中,此限制被删除;您可以在运行时创建模型并定义所需的一切。它仍然可以读取属性,这是并排的(如果您愿意,可以在不同类型上使用不同的方法)。
但是,如果调用者不想知道任何血腥细节,您可以选择将RuntimeTypeModel详细信息隐藏在自己的API之后。
v2可以从主干构建,并且非常稳定 - 但是有一些TODO项目 - 主要是边缘情况需要完成才能完全兼容。大多数人都不会看到这些案件。