c# - protobuf.net 中的子类化

标签 c# .net serialization protobuf-net

我有一个围绕 protobuf.net 构建的系统,该系统公开了一个我希望最终用户实现的抽象类 (foo)。抽象类可由 protobuf.net 序列化。目前,当我尝试序列化 foo 的实现时,出现错误:

Unexpected type found during serialization; types must be included with ProtoIncludeAttribute; found bar passed as foo

这是有道理的,我还没有告诉系统有关 bar 的信息,所以当我将 bar 作为 foo 传递时,它会感到困惑。是否有一种巧妙的设置方式,使程序员使用我的库来做事变得简单(最好只是将字段标记为可序列化,就像正常的 protobuf.net 用法一样?

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

最佳答案

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

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

v2 可用于从主干构建,并且非常稳定 - 虽然有一些 TODO 项目 - 主要是边缘情况需要完成以实现完全兼容性。大多数人不会看到这些情况。

关于c# - protobuf.net 中的子类化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4916051/

相关文章:

c# - 正确的应用程序设计 : data reading and UserControls

.net - 当窗体没有焦点时激活 ContextMenuStrip

c# - 预测 Excel 如何使用 Postgres 函数解释字符串

c# - UWP 中的振动电话

.net - 程序包还原失败。回滚软件包更改-Serilog.AspNetCore

c# - C# 中的可空 DateTime

Java 序列化问题

c# - UnitsNet 的 Json 序列化显示的数据比我类的多得多

java - 在操作调用中生成 Struts 2 JSON 输出

c# - jquery 调用页面方法失败