【发布时间】:2015-06-25 06:40:48
【问题描述】:
背景
我在使用 3rd 方组件的应用程序中遇到了一个奇怪的情况。我的应用程序中有不少类实现了 ISerializable 接口,以基本上来回保持对象状态。当我在一个版本中序列化我的应用程序类并尝试使用不同版本的 3rd 方组件进行反序列化时,我在序列化过程中遇到了兼容性问题。
问题
3rd 方组件的最新版本看到了一些主要的 w.r.t 类型和程序集的改组。
i.e. for ex :
较早的类型 T1 在程序集 A1 下找到。 .发布新版本,其中组件 A1 现在已拆分为两个不同的组件,例如:A11 和 A12。 T1 类型现在位于 A12
反序列化的类型T1,正在尝试查找程序集A1。但是现在由于它已被移动到像 A12 这样的不同程序集,它会抛出 SerializationException 说明它无法找到程序集 A1。
我尝试过的事情:
1.序列化绑定器:
我使用了一个 SerializationBinder 类,它基本上检查了传入的 assemblyName 和 TypeName 信息,并在反序列化时适当地路由到正确的程序集。
2。使用 ResolveEventHandler 委托的 AssemblyResolve 事件
基本上我可以从程序集的标识中提取程序集文件名,我可以重新路由更新的路径,我的应用程序可以在其中找到程序集文件,使用调用 Assembly.LoadFrom 加载程序集并从 ResolveEventHandler 方法返回生成的程序集引用
尽管上述两种方法在一定程度上都有效。对于在我的应用程序中标记为可序列化的所有类型,将路由信息提供给正确的程序集是一项艰巨的任务。更不用说这必须为将来的版本再次更新。
所以我在这里寻求帮助/建议/替代方案
这里有人遇到过这种情况吗? 你是如何解决这样的问题的? 如果您在使用带有 3rd 方组件的序列化时可以避免一些最佳实践和陷阱
提前干杯和感谢 增值税
【问题讨论】:
-
那是什么格式的序列化?肥皂?
标签: c# .net serialization .net-assembly