使用.Net BinaryFormatter

时间:2016-01-29 16:47:05

标签: c# serialization binaryformatter

好吧,稍后发布了几个版本,字典中的键已从int更改为long。现在,在旧对象图的反序列化过程中,Deserialize方法使用ArgumentException中止而着名的"类型为XX的对象无法转换为类型YY"异常。

完整的例外是:

  

类型的对象   ' System.Collections.Generic.Dictionary`2 [System.Int32,System.Collections.Generic.List`1 [XX]]'   无法转换为类型   ' System.Collections.Generic.Dictionary`2 [System.Int64,System.Collections.Generic.List`1 [XX]]'

值得注意的是,我在发布期间使用SerializationBinder类来处理类型更改。

任何帮助如何处理此错误?

1 个答案:

答案 0 :(得分:0)

“正确”修复(假设您没有其他遗留系统访问此数据)将所有存储数据“反序列化”为Dictionary<int,List>对象,然后将每个元素复制到一个Dictionary<long,List>对象,然后将Int64字典序列化回存储介质。

这样可以立即解决问题,无需更改任何代码,但可能需要大量资源,具体取决于您要处理的数据量。