首页 > 解决方案 > 是否有从古老版本的 protobuf-net 向后兼容的升级路径(没有强制执行正确截断的文件)?

问题描述

编辑

在深入挖掘之后,我了解到我的问题是由不正确截断的 protobuf 流引起的(再次因此,我重新制定了这个问题,以关注链接问题中尚未回答的方面(请参阅“精炼问题”)。

背景

因此,我继承了这一庞大的应用程序集,这些应用程序几乎将 protobuf-net 用于所有事情(这不是一件坏事 :-))。客户有大量的序列化数据,所以我必须保持向后兼容这些应用程序当前使用的 protobuf-net 版本(至少,我必须能够反序列化他们拥有的数据)。问题来了:到目前为止,应用程序的所有部分都基于 protobuf-net 1.0.0.282,我非常希望/需要升级。而且,您可以想象,我最初尝试换入较新版本(从 v2 开始)失败了(我遇到了各种异常,例如“源数据中的无效字段:0”)。

原始问题

避免深入了解各个异常的细节,我的目标是升级到 protobuf-net 的非原始版本,同时保持向后兼容性甚至可行吗?如果是,什么是一个好的起点?有没有关于如何开展这样一项事业的资源?我只在 github 存储库中找到了这个文档,但是我在使用提到的 CompatibilityLevel 方面并没有取得什么成果。

问题

注意:这部分问题已经在评论中得到了回答——是的,协议是兼容的 远离个别异常的细节,我的目标是升级到 protobuf-net 的非原始版本,同时保持向后兼容性是否可行?如果是,什么是一个好的起点?有没有关于如何开展这样一项事业的资源?我只在 github 存储库中找到了这个文档,但是我在使用提到的 CompatibilityLevel 方面并没有取得什么成果。

提炼的问题

原来我真正的问题是编码的原始作者决定将 protobuf 数据序列化为最后填充零的文件。不要问我为什么,但我对此无能为力——这些数据存在于客户机器上。Protobuf-net 1.0.0.282 对这些文件非常满意,并且可以正确反序列化它们,而较新的版本(正确)对它们感到厌烦。现在,我能做些什么来让新版本的 protobuf 接受零填充文件吗?如何在不破坏客户数据档案的情况下进行更新?

标签: c#protobuf-net

解决方案


据我记得,在 1.x 到 2.x(很久以前)的时候没有基本的配置更改,所以据我所知,这应该是一个非常省力的升级. 如果发生意外情况,示例类型和有效负载会很有用,尽管这对于 GitHub 来说可能比 Stack Overflow 更好。

实际的数据协议在任何时候都没有改变,所以没有根本原因这不应该起作用,老实说,我很惊讶你遇到了任何障碍。我很乐意提供进一步的帮助,但是:我真的需要看到我面前的问题。


推荐阅读