我有一个客户端和一个服务器应用程序,它们使用二进制序列化通过 .NET 2.0 Remoting 进行通信。
对数据传输对象的接口(interface)和实现类之一进行了小的更改,添加了一个字符串数组字段。
如果我重新部署新版本的服务器应用程序,我的旧客户端会继续工作吗?
我认为他们会,因为没有从接口(interface)和直接实现中删除任何内容,但我不确定。
它可能归结为另一个问题 - 二进制反序列化器是否“足够聪明”
通过将无法在输入二进制流中找到数据的字段初始化为 null 来处理这种情况,还是会中断并抛出异常?
最佳答案
您可以向新属性添加属性:OptionalField
.如果没有该属性,反序列化器将无法将序列化数据转换回更新后的定义。该属性是为了确保反序列化器可以优雅地处理“丢失”的数据。
如果你想为新属性设置一个默认值,在没有合适的数据被反序列化的情况下,实现 IDeserializationCallback
接口(interface),并在结果方法中设置默认值(如果有)。
关于.net - 二进制序列化,向类添加一个新字段——它会工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3527399/