我有一個標記爲Serializable
的基類,以及標記爲Serializable
的派生類。我想在反序列化過程中在基類中做一些事情,因此聲明瞭一個標記爲OnDeserializing
的方法,但重要的是此方法將在任何派生類的OnDeserializing
方法之前執行。
派生類也可能由其他人編寫。
我可以相信基類的方法將在派生類中的任何序列化方法之前被調用嗎?
我會用SoapFormatter
。繼承樹上的反序列化命令
回答
我打算出去走一走,說它可能會首先找到派生的方法,而不是基於我所見過的將反射用於其他目的的基礎方法。我建議你可能希望顯式調用孩子的基本行爲,而不是依賴任何用屬性標記的方法的順序。如果較低級別的對象是可直接實例化的,而不是抽象的,因此可能還有一個OnDeserializing-marked方法,您可能需要設置標誌來指示是否已經處理了該級別。
忘了寫,但派生類可能是由其他人創建的,所以我無法控制它。無論如何,謝謝你的重要信息。這非常有幫助。 – RoadBump
@RoadBump你可能想要考慮使用一個可以被重寫的方法 - 這樣你就可以控制繼承類如何完成,包括首先顯式調用基類代碼。 – tvanfosson
聽起來像個好主意。我想實現'ISerializable'接口需要一個特殊的構造函數,請參見[這裏](http://www.diranieh.com/netserialization/binaryserialization.htm#Custom%20Serialization)。使用構造函數是否確保在派生類的序列化之前調用基類的ctor? – RoadBump
- 1. 反序列化繼承類
- 2. 繼承對象的XML反序列化
- 3. 反序列化繼承的ArrayList到繼承名單<>
- 4. 傑克遜繼承和反序列化
- 5. 反序列化繼承對象
- 6. Java JSON反序列化繼承類
- 7. XML序列化/反序列化的名字和繼承
- 8. C# - 對象列表的反序列化,不反序列化繼承的屬性
- 9. C#序列化/繼承
- 10. 可序列化繼承
- 11. 可序列化可繼承
- 12. DataContract序列化(繼承)
- 13. .net的最佳序列化庫,能夠正確地反序列化繼承
- 14. 在C++中反映類的繼承樹?
- 15. 序列化/反序列化命令對象
- 16. 反序列化未知的繼承類型[C++]
- 17. 定義繼承後的Protobuf-net反序列化
- 18. 反序列化使用Json.NET從超類繼承的類?
- 19. 如何使用Gson反序列化繼承的Kotlin數據類
- 20. .Net序列化 - 在繼承樹中混合[Serializable]與自定義
- 21. 繼承釋放命令?
- 22. 繼承列表和序列化
- 23. IllegalAccessException - 繼承不可序列化的對象的序列化
- 24. JSON序列化繼承的模型
- 25. 從Canvas類繼承的序列化類
- 26. 繼承模型的Django序列化
- 27. protobuf-net將基類反序列化爲繼承類
- 28. JSON反序列化器繼承了泛型類型
- 29. 如何將xml反序列化爲繼承對象?
- 30. protobuf網Guid反序列化Guid.Empty當使用繼承
我正在使用IFormatter。由於某些原因,無法使用Serializer(如XmlSerializer)。 – RoadBump
另一個有用的問題[這裏](http://stackoverflow.com/questions/4023644/can-ondeserializedattribute-be-used-instead-of-ideserializationcallback-interfac)。從我的測試中,順序是「Base.OnDeserializing」,「Derived.OnDeserializing」,「Base.OnDeserialized」,「Derived.OnDeserialized」,但它可能取決於對象圖的確切結構。 – RoadBump