有没有理由为什么.NET二进制格式化器会多次调用GetObjectData?

时间:2011-10-24 16:35:36

标签: .net serialization

我们使用二进制格式化程序来序列化对象图,其中同一对象可能被多个路径引用。但是在序列化期间,会多次调用特定对象的GetObjectData。当尝试使用更简单的对象使用测试样本时,它只被调用一次,与对象图中出现的次数无关。是否有任何理由可以多次访问同一个对象,并且在序列化期间可能会在Serializable对象上调用.GetObject数据?发生这种情况时,反序列化似乎会因FixUp错误而失败。

1 个答案:

答案 0 :(得分:3)

发现问题和解决方案。这是.NET中的一个错误。当使用循环引用和代理时,在反序列化期间,可能会出现问题。修复是使用FormatterServices.GetSurrogateForCyclicalReference()包装内部序列化代理。它现在似乎工作,但我会尝试更多的用例来排除任何其他问题。希望能帮助某人并节省时间