gpt4 book ai didi

c# - 对象可以跨不同的框架版本序列化/反序列化吗?

转载 作者:太空狗 更新时间:2023-10-29 23:33:36 26 4
gpt4 key购买 nike

我需要在 .NET 4.0 中使用 BinaryFormatter 序列化一个对象,然后通过网络将其发送(通过 SOAP 作为字节数组)到在 .NET 3.5 下运行的 Web 服务。反之亦然。我已经测试了这种情况,它似乎工作正常。

有一个老question关于 SO 上的这种情况,它谈论的是 .NET 1.x 到 2.0,这并没有让我对该方法充满信心。

所以它适用于我的测试工具,但我无法测试该对象的所有可能变体,因此我需要一些理论基础。

通常,对象可以跨不同的框架版本进行序列化/反序列化吗?这是一个可以接受的场景还是对我有用的黑客攻击?

最佳答案

如果您所说的“二进制”是指 BinaryFormatter,那么它在版本之间已经是非常不能容忍的,因为它严格依赖于类型元数据(除非您非常努力地使用自定义绑定(bind))。因此,只有当两端都使用完全相同的实现时,它才严格可靠。即使将属性更改为自动实现的属性或从自动实现的属性更改属性也是一个重大更改。

这不是“二进制”的失败,而是 BinaryFormatter 的一个特性。其他二进制序列化器没有这个问题。例如,protobuf-net 在操作系统之间、框架之间等工作——因为格式 a: 不关心你的特定类型,而 b: 固定为已发布的规范。

如果您当前为此使用 BinaryFormatter:那么 IMO 是的,您应该明确测试每个 API。因为任何 类型都可以改变实现细节。不幸的是,由于 BF 习惯于提取意外数据(通过事件等),即使这样也不一定足以验证实际使用情况。

关于c# - 对象可以跨不同的框架版本序列化/反序列化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9231949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com