2011-11-06 49 views
1

我有下一個問題:我有一個大的對象圖被二進制序列化,有很多標記爲[NonSerializable]或[field:NonSerializable]的字段和事件。你可以看到的問題是,我仍然不知道從哪裏或爲什麼(複雜調用樹),某些Action或Func(它們是標記爲[NonSerializable]並且已分配lambda表達式的字段)被序列化在創建的二進制文件中。有沒有一種技術可以檢測那些實際上是序列化的非序列化的成員?

那麼,我可以使用什麼技術來檢測「序列化泄漏」:我的代碼中哪些事件被掛鉤的成員?

+0

反序列化它並用調試器查看它。 –

+0

而不是二進制序列化程序使用xmlserializer來檢查你是否認爲是正確的。 –

回答

2

我會在這裏使用反射,通過每個屬性/場工作到相關類型(以列表和其他仿製藥在內),試圖建立的類型的完整列表,我們預計模型。從那裏,獲取所有從EventHandlerList或Delegate類型的字段(考慮到基類和可能的子類)。現在檢查是否有任何這些字段未用NonSerializedAttribute標記以忽略序列化。

或者也許更容易:使用不是的序列化器EVER寫代表;任何XmlSerializer,JavascriptSerializer,DataContractSerializer,或者如果你想要直接的二進制protobuf-net。或者幾乎任何不是BinaryFormatter或NetDataContractSerializer的東西。

相關問題