.net NET二进制格式化程序多次调用GetObjectData有什么原因吗?

.net NET二进制格式化程序多次调用GetObjectData有什么原因吗?,.net,serialization,.net,Serialization,我们正在使用二进制格式化程序序列化对象图,其中同一对象可能被多个路径引用。但是,在序列化过程中,会多次调用特定对象的GetObjectData。当使用simpler对象尝试使用测试样本时,它只会被调用一次,而与它在对象图中出现的次数无关。是否有任何原因导致同一对象将被多次访问,并且在序列化过程中可能会对可序列化对象调用.GetObject数据?发生这种情况时,反序列化似乎会失败,并出现修复错误。找到了问题和解决方案。这是.NET中的一个bug。当存在循环引用并且使用了代理项时,在反序列化期间,可

我们正在使用二进制格式化程序序列化对象图,其中同一对象可能被多个路径引用。但是,在序列化过程中,会多次调用特定对象的GetObjectData。当使用simpler对象尝试使用测试样本时,它只会被调用一次,而与它在对象图中出现的次数无关。是否有任何原因导致同一对象将被多次访问,并且在序列化过程中可能会对可序列化对象调用.GetObject数据?发生这种情况时,反序列化似乎会失败,并出现修复错误。

找到了问题和解决方案。这是.NET中的一个bug。当存在循环引用并且使用了代理项时,在反序列化期间,可能会发生问题。修复方法是使用FormatterServices.getProjectForCyclicalReference()包装内部序列化代理。它现在似乎可以工作了,不过我将尝试更多的用例来排除任何其他问题。希望这能帮助别人并节省时间

你能给我们看看你的代码吗?是否仅序列化一个对象图(即只调用一次
Serialize()
)?什么是“修复错误”?抱歉代码库太大,无法共享。它不是一个正在序列化的对象,而是一个哈希表,该哈希表将包含其他对象,并且所讨论的对象类型可能从多个路径引用。反序列化期间引发的异常是:“System.Runtime.Serialization.SerializationException:ID为91的对象在修复程序中被引用,但不存在。”我不是要求您共享整个代码库。但是你能分享一段我们可以用来复制问题的代码吗?嗨,斯维克,找到问题了。这是.NET中的一个bug。当存在循环引用并且使用了代理项时,在反序列化期间,可能会发生问题。修复方法是使用FormatterServices.getProjectForCyclicalReference()包装内部序列化代理。它现在似乎可以工作了,不过我将尝试更多的用例来排除任何其他问题。希望这能帮助别人并节省时间。然后你应该把你的决心作为答案张贴出来,然后接受它。