测试结果总结:二进制反序列化的时候会自动兼容处理序列化一方新增的数据。但是在个别情况下会出现反序列化的过程中遇到异常的情况。
出现反序列化异常的数据类型:
泛型集合
数组
这两种数据结构并非是一定会导致二进制反序列化报错,而是有一定的条件。泛型集合出现反序列化异常的条件有三个:
序列化的对象新增了泛型集合;
泛型使用的是新增的类;
新增的类在反序列化的时候不存在;
数组也是类似的,只有满足上述三个条件的时候,才会导致二进制反序列化失败。这也是为什么之前发布后一直没有问题而对于其中的泛型集合进行赋值后出现微服务客户端报错的原因。
既然通过测试了解到了二进制反序列化确实会有自动的兼容处理机制,那么有必要深入了解下MSDN上对于二进制反序列化的容错机制的理论知识。
五 二进制反序列化的容错机制二进制反序列化过程中不可避免会遇到序列化与反序列化使用的程序集版本不同的情况,如果强行要求反序列化的一方(比如微服务的客户端)一定要跟序列化的一方(比如微服务的服务端)时时刻刻保持一致在实际应用过程是不现实的。从.NET2.0版本开始,.NET中针对二进制反序列化引入了版本容错机制(Version Tolerant Serialization,简称VTS)。