我可以避免向類中添加額外字段來存儲僅用於反序列化/序列化的數據嗎?哪裏最好存儲臨時反序列化數據?
假設我有一些類:
[Serializable]
class MyClass {
[NonSerialized]
NonSerializableDataType myField;
SomeOtherDataType serializableTemporaryData;
[OnSerializing]
OnSerializing (StreamingContext context) {
// build serializableTemporaryData from myField
}
[OnDeserialized]
void OnDeserialized (StreamingContext context) {
// build myField from serializableTemporaryData
}
}
有什麼辦法,以避免在MyClass
每個對象serializableTemporaryData
場?例如,我可以把它變成靜態的(可能通過改變我的On ...方法)?
約束:我無法更改NonSerializableDataType
的實現。
示例:假設myField包含資源的句柄。然後,在序列化時,我必須存儲一些關於如何在反序列化後獲取資源的信息,但我無法存儲句柄本身。如果我將句柄包裝到另一個類中,那麼我只是將問題轉移到了包裝類 - 然後我會問包裝類的問題。
製作靜態在這裏是一個壞主意。考慮兩個線程作用於同一類的兩個對象,並進行序列化。 – Ankush
你正在使用哪個序列化程序? Xml還是二進制?另外,你不能改變'NonSerializableDataType',但你可以繼承它嗎? –
爲什麼你需要存儲並且每次都不能生成它? – MichaelT