【问题标题】:C# Serialization issues while mapping one version of a type to a different version of a type将类型的一个版本映射到类型的不同版本时出现 C# 序列化问题
【发布时间】:2015-06-25 06:40:48
【问题描述】:

背景
我在使用 3rd 方组件的应用程序中遇到了一个奇怪的情况。我的应用程序中有不少类实现了 ISerializable 接口,以基本上来回保持对象状态。当我在一个版本中序列化我的应用程序类并尝试使用不同版本的 3rd 方组件进行反序列化时,我在序列化过程中遇到了兼容性问题。

问题
3rd 方组件的最新版本看到了一些主要的 w.r.t 类型和程序集的改组。

i.e. for ex :
较早的类型 T1 在程序集 A1 下找到。 .发布新版本,其中组件 A1 现在已拆分为两个不同的组件,例如:A11A12T1 类型现在位于 A12

反序列化的类型T1,正在尝试查找程序集A1。但是现在由于它已被移动到像 A12 这样的不同程序集,它会抛出 SerializationException 说明它无法找到程序集 A1

我尝试过的事情:

1.序列化绑定器:
我使用了一个 SerializationBinder 类,它基本上检查了传入的 assemblyName 和 TypeName 信息,并在反序列化时适当地路由到正确的程序集。

2。使用 ResolveEventHandler 委托的 AssemblyResolve 事件
基本上我可以从程序集的标识中提取程序集文件名,我可以重新路由更新的路径,我的应用程序可以在其中找到程序集文件,使用调用 Assembly.LoadFrom 加载程序集并从 ResolveEventHandler 方法返回生成的程序集引用

尽管上述两种方法在一定程度上都有效。对于在我的应用程序中标记为可序列化的所有类型,将路由信息提供给正确的程序集是一项艰巨的任务。更不用说这必须为将来的版本再次更新。

所以我在这里寻求帮助/建议/替代方案

这里有人遇到过这种情况吗? 你是如何解决这样的问题的? 如果您在使用带有 3rd 方组件的序列化时可以避免一些最佳实践和陷阱

提前干杯和感谢 增值税

【问题讨论】:

  • 那是什么格式的序列化?肥皂?

标签: c# .net serialization .net-assembly


【解决方案1】:

【讨论】:

  • 谢谢。您的回答更具体到 .NET 序列化最佳实践。虽然我的问题更多地与处理依赖于不同版本的 3rd 方组件的类型的序列化/反序列化有关。
  • 好的,明白了,这是一个完全不同的问题... 可以将您的路由信息​​存储在配置文件中吗?然后在需要时手动/自动更新?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
相关资源
最近更新 更多