protobuf-net 版本 2.X 到 3.X 迁移

Posted

技术标签:

【中文标题】protobuf-net 版本 2.X 到 3.X 迁移【英文标题】:protobuf-net version 2.X to 3.X migration 【发布时间】: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 库序列化的数据,向后兼容性似乎被破坏了。有迁移指南吗?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于protobuf-net 版本 2.X 到 3.X 迁移的主要内容,如果未能解决你的问题,请参考以下文章

迁移 SQLCipher 版本。 2.x 数据库到版本。 FMDB 使用的 3.x

CentOS 7.x下升级Python版本到3.x系列(新老版本共存)

强大的工具:Capslock+ 3.x版本

python官网上版本那么多要下载哪个?

Mac vue-cli2.x版本升级3.x方法

为何Angular 4 是 Angular 2 的下一个版本,为啥没有 Angular 3,x