.net - 跨不同框架版本的.NET序列化的稳定性

标签 .net serialization upgrade versions stability

我正在处理的项目需要先对数据结构进行序列化,然后再关闭它,并在再次启动时从此序列化的数据中恢复其状态。

去年,我们为.NET 1.1进行了构建,但遇到了一个棘手的问题,

  • 我们的代码在.NET 2.0上运行
  • 使用某些软件升级的客户,该软件以某种方式将1.1设置为默认
  • 我们的代码在.NET 1.1上运行,无法反序列化其存储状态

  • 通过禁止特定的软件升级,可以“解决”这个特定的问题,并且由于我们的目标是.NET 2.0框架(因此我们不可能在1.1上运行),因此这不应该成为问题。

    在2.0和较新的框架之间,此序列化可能再次发生不兼容的更改的机会是什么?如果我们使用<supportedVersion>将代码固定为2.0.50727,那么在2.0.50727.1434和2.0.50727.nnnn(某些将来的版本)之间进行更改的机会是多少?序列化的数据结构是标准类库中的数组,映射,字符串等。

    另外,是否可以保证即使在进一步升级.NET之后,也将始终安装2.0.50727框架?欢迎使用指向Microsoft文档的指针。

    最佳答案

    在框架版本之间进行更改的可能性很小(但不为零!)。目的是您应该能够使用二进制序列化和远程处理来在运行不同框架版本的客户端和服务器之间进行通信。修补程序可用的.NET 1.x和2.0 is a bug之间的不兼容性。

    但是,二进制序列化还有其他问题,尤其是对要序列化的结构的版本支持不佳。从您描述的用例来看,Xml序列化是显而易见的选择:如果您不介意对.NET 3.x的依赖性,则DataContractSerializer比XmlSerializer更加灵活。

    您不能保证将.NET Framework 2.0始终安装在将来的Windows版本中。但我确信Microsoft将努力确保大多数.NET 2.0应用程序在.NET 4.x和更高版本上均能不变地运行。我对此没有任何引用:在任何情况下,任何此类 promise 仅会真正适用于Windows的下一版本(Windows 7)。

    关于.net - 跨不同框架版本的.NET序列化的稳定性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/203694/

    相关文章:

    .net - 是否可以查看程序集内置的 .NET 版本?

    html - 为什么第一个元素在我的 Rails 多选中总是空白,使用嵌入式数组?

    python - Python中用户类的序列化

    asp.net-mvc - 从 MVC4 升级到 MVC5

    c# - 从命令行更新 .net 标准 PackageReference

    .net - 验证应用程序 block 和 .NET 4.0 代码契约(Contract)

    java - 为什么 'table'中的成员字段 'java.util.HashMap'是 transient 的?

    php - 从 PHP 5.6 升级到 7.4

    python - 不允许执行 Sudo pip install 升级操作

    c# - Windows 窗体应用程序,自定义控件之间如何通信?