Tag: 向后兼容

如何为二进制格式化程序创建SerializationBinder,以处理类型从一个程序集和名称空间到另一个程序集和名称空间的移动

背景如下 我想通过将代码移动到不同的项目来重构代码 其中一些代码包含可序列化的DTO,用于跨多个端点发送和接收数据 如果我移动代码,序列化中断(因此它不能与我的应用程序的旧版本向后兼容) 这个问题的解决方案是SerializationBinder,它允许我在某种意义上从一种类型“重定向”到另一种类型。 因此,我想创建一个SerializationBinder来满足这种需求。 但必须满足以下要求 SerializationBinder的输入应该是旧类型到新类型映射的列表。 映射应包括旧程序集名称(无版本,无公钥标记)和类型的旧全名(名称空间和名称)以及新程序集名称和类型的新全名 对于输入中的类型,应忽略程序集的版本号 如果我的类型碰巧在generics(List,Dictionary等)中而不需要在输入中包含generics,它应该处理generics 对于不在输入中的任何内容(例如,未移动的类型或类似数据集的.NET类型),它应该默认使用二进制序列化器的开箱即用算法 这可能还是我在做梦? 有什么东西已经做到了吗? 我认为这是一个常见的问题。 到目前为止,我认为没有简单的方法可以做到3而且根本没有做到4。 这是一次尝试 public class SmartDeserializationBinder : SerializationBinder { /// /// Private class to handle storing type mappings /// private class TypeMapping { public string OldAssemblyName { get; set; } public string OldTypeName { get; set; } public string NewAssemblyName { […]