【问题标题】:protobuf-net version 2.X to 3.X migrationprotobuf-net 版本 2.X 到 3.X 迁移
【发布时间】:2021-05-05 03:00:39
【问题描述】:

我正在更新我的 protobuf-net 库参考,特别是从 2.4.43.0.101。以前,我们在列表中使用null,因为它们包含对业务有意义的信息(例如,new[] { "one", "two", null, null, "five" })。但是,据我了解,3.x 尚不支持它们 (https://protobuf-net.github.io/protobuf-net/releasenotes#)。

对于带有 null 的集合,是否有建议的迁移策略?

我可以通过附加字段来减轻未来的变化(例如,将集合转置到字典并在序列化/反序列化时再次返回),但是对于使用 2.x 库序列化的数据,向后兼容性似乎被破坏了。有迁移指南吗?

【问题讨论】:

    标签: c# protobuf-net


    【解决方案1】:

    鉴于 3.x 尚不支持 null 保留,您的选择有些有限:

    1. 提交 PR 以添加缺少的功能。快速浏览protobuf source code 让我觉得实现起来相当简单。在链接源文件的第 161 行中,似乎有一个空值抛出,这是我要开始的地方。不过,我可能非常错误地认为这有多么复杂。
    2. 看看是否可以同时使用这两个库。您需要知道(或检测)要序列化的数据是 v2 还是 v3 格式(我没有检查过,但如果没有办法通过查看前几个字节来检测这一点,您会感到惊讶)。您可能需要编译一个自定义版本来为其赋予不同的命名空间,以便两者共存。
    3. 将数据迁移到 v3。您可以将其作为一次性操作(您控制的少量数据)或按需(大量数据或外部接收的数据)来执行。您需要重新设计用于具有空值的列表中的类型,以便不再有空值(例如,通过具有逻辑上表示空值的自定义值)。
    4. 继续使用 v2。它稳定且运行良好,因此除非您有特定的升级需求,否则可能不值得付出努力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 2018-02-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多