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

mik*_*ike 6 c# protobuf-net

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

是否有针对具有空值的集合的建议迁移策略?

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

Mor*_*ner 1

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

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