2011-04-10 30 views
1

我有一個類,其中包含從文件加載的一些資源。想要將此類的對象序列化爲XML,但是具有指向資源的路徑而不是實際的資源本身。XMLSerializer的特殊getter和setter

現在我已經通過創建一些ResourceSource字段來存儲資源的路徑並在資源本身上使用XMLIgnore。但是,這些必須是公開的,不太好。

看來我真正想要的是能夠創建只由XMLSerialize執行的特殊屬性訪問器。這個功能是否存在,或者我有可能實現它嗎?

或者,我可以將我的ResourceSource字段設置爲只能通過XMLSerialize訪問嗎?

回答

1

你看過執行IXmlSerializable代替嗎?這允許您更好地控制序列化過程。

實現此接口有兩個原因。首先是控制你的對象如何被XmlSerializer序列化或反序列化。例如,您可以將數據分塊爲字節而不是緩衝大數據集,還可以避免使用Base64編碼對數據進行編碼時發生的通貨膨脹。要控制序列化,請實現ReadXml和WriteXml方法來控制用於讀取和寫入XML的XmlReader和XmlWriter類。

第二個原因是能夠控制架構。要啓用此功能,必須將XmlSchemaProviderAttribute應用於可序列化類型,並指定返回該模式的靜態成員的名稱。

+0

看起來像這就是我想要的。在我的資源類中實現這個功能是我想要的 – 2011-04-10 21:33:26

0

這聽起來像你的類被重載有多重責任,這是幾乎總是一個紅旗,它的時候了一些重構。

我會做的是有一個可序列化的類,它存儲資源路徑,另一個存儲資源本身。不可序列化類的構造函數可能需要序列化類的實例,從磁盤加載資源等。

+0

你確實有一點,但我認爲我的班級沒有多重責任。我只想讓我的類有一個保存和加載方法,並且它保存的文件包含對其他文件的引用,而不是數據本身 – 2011-04-10 20:11:48