2011-10-24 23 views
2

我們使用二進制格式化程序來序列化對象圖,其中相同的對象可能被多個路徑引用。但是在序列化過程中,特定對象的GetObjectData被多次調用。當使用更簡單的對象使用測試樣本進行嘗試時,它將獨立於對象圖中出現的次數被調用一次。是否有任何理由爲什麼同一個對象會被多次訪問,並且在序列化過程中.GetObject數據可能會在Serializable對象上調用?發生這種情況時,反序列化似乎會因FixUp錯誤而失敗。.NET二進制格式化程序會多次調用GetObjectData嗎?

+0

你能告訴我們你的代碼嗎?你是否只序列化一個對象圖(即只調用一次'Serialize()')?什麼是「FixUp錯誤」? – svick

+0

道歉,代碼庫非常大,可以共享。它不是一個正在被序列化的對象,而是一個散列表,其中有其他對象,並且所討論的對象類型可以從多個路徑引用。反序列化期間引發的異常是「System.Runtime.Serialization.SerializationException:具有ID 91的對象在修正中引用但不存在。」 – sraj

+0

我不是要求你分享你的整個代碼庫。但是,您能分享一段我們可以用來複制問題的代碼嗎? – svick

回答

3

發現問題和解決辦法。這是.NET中的一個錯誤。當使用循環引用和代理時,在反序列化過程中,可能會發生問題。修正是用FormatterServices.GetSurrogateForCyclicalReference()包裝內部序列化代理項。它似乎現在工作,但我會嘗試更多的用例來排除任何其他問題。希望有人幫助並節省時間

相關問題