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.4 到 3.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