【问题标题】:Subclassing in protobuf.netprotobuf.net 中的子类化
【发布时间】:2011-06-22 09:51:08
【问题描述】:

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

期间发现意外类型 序列化;必须包含类型 带有 ProtoIncludeAttribute;成立 bar 作为 foo 传递

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

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

【问题讨论】:

    标签: c# .net serialization protobuf-net


    【解决方案1】:

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

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

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

    【讨论】:

    • 从 v1 迁移到 v2 需要做多少工作?我的时间表非常紧凑:/
    • @Martin 只要你不碰到(极少数)极端情况,非常少 - 如果你愿意,请随时给我发电子邮件指示性示例你想工作,我会看到我可以为你填补空白......
    • 谢谢 Marc,我会尝试自己做,如果遇到困难我会回复你 :)
    • 啊哈,看起来很有希望。我想我知道这是如何工作的,而且看起来很整洁,谢谢 Marc
    猜你喜欢
    • 2011-04-17
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多