我試圖創建一個函數,將我的應用程序的當前狀態保存到一個文件,另一個函數加載保存的文件。目前,所有的信息都包含在一個對象中,而這個對象又是指其他對象。我最近聽說C#有一些內置的類,可以幫助你序列化和反序列化你的對象,所以我做了一些研究並瞭解了DataContracts,主要來自這個頁面:http://msdn.microsoft.com/en-us/library/ms731073.aspx如何序列化繼承內置c#類的對象?
大部分工作,除了類實現內置的類。例如,我有一個繼承System.Windows.DependencyObject的對象,當我嘗試序列化它時,它抱怨我的類繼承了一個沒有DataContract屬性的類。
這對我來說是有道理的,爲什麼這會是一個問題。當一個對象被反序列化時,它的構造函數不會被調用。如果它繼承了一些不可序列化的東西,那可能會使其處於無效狀態。
我想知道這是否可能:我可以以某種方式告訴反序列化器在反序列化我的對象之前調用基類的默認構造函數嗎?然後我不得不告訴序列化器不要嚇壞了。
大多數序列化框架允許您在序列化期間忽略(例如XmlIgnore)您的一些屬性,並讓您運行自定義的反序列化邏輯。 – ziya 2012-03-14 20:41:04
問題是我沒有訪問基類,因爲它在標準的C#庫中。如果我創建了基類,那麼很容易使它可序列化並告訴它該忽略什麼。 – hypehuman 2012-03-14 20:52:32
'當一個對象被反序列化時,它的構造函數不會被調用,這是不正確的。它被你的序列化器通過反射調用(不是顯式的)(實際上,它在創建實例時被調用) – 2012-03-14 20:53:45