.net - 二进制序列化,向类添加一个新字段——它会工作吗?

标签 .net remoting serialization binary-serialization binarystream

我有一个客户端和一个服务器应用程序,它们使用二进制序列化通过 .NET 2.0 Remoting 进行通信。

对数据传输对象的接口(interface)和实现类之一进行了小的更改,添加了一个字符串数组字段。

如果我重新部署新版本的服务器应用程序,我的旧客户端会继续工作吗?

我认为他们会,因为没有从接口(interface)和直接实现中删除任何内容,但我不确定。

它可能归结为另一个问题 - 二进制反序列化器是否“足够聪明”
通过将无法在输入二进制流中找到数据的字段初始化为 null 来处理这种情况,还是会中断并抛出异常?

最佳答案

您可以向新属性添加属性:OptionalField .如果没有该属性,反序列化器将无法将序列化数据转换回更新后的定义。该属性是为了确保反序列化器可以优雅地处理“丢失”的数据。

如果你想为新属性设置一个默认值,在没有合适的数据被反序列化的情况下,实现 IDeserializationCallback接口(interface),并在结果方法中设置默认值(如果有)。

关于.net - 二进制序列化,向类添加一个新字段——它会工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3527399/

相关文章:

c# - 在 .NET Compact Framework 的托管代码 (C#) 中使用非托管 (C) 缓冲区

.net - REST 客户端 HTTP 多部分支持

.net - 从 asp.net 页面创建资源

iis - 使用 TCPChannel 通过 SSL 进行 .NET 远程处理

apache-flex - [RemoteClass] 在 Flex Actionscript 中如何工作 我可以将它用于自定义数据绑定(bind)吗?

javascript - jQuery 序列化问题

java - 无法加载已保存的 JButton

c# - 如何在 C# 中对模板使用 new 运算符

blackberry - 将 Powershell 变量传递到脚本 block 中

c# - json.net 在序列化和反序列化一个非常简单的类时抛出错误