我嘗試通過數據合同序列化來序列化和反序列化自定義類。 序列化效果很好。但是,當反序列化時,我遇到了一個問題,因此(source):如何在反序列化之前調用構造函數?
對象反序列化時不調用構造函數。
事情是,我在構造函數中做了一些初始化。 這包括一些數據結構。
沒有對構造函數的調用,數據結構爲null
,並且在反序列化過程中調用setter函數失敗。
如何在使用任何訪問器之前在反序列化過程之前或過程中調用構造函數或初始化對象?
有幾個方法,我可以通過屬性爲回調聲明,像這樣(同一消息來源):
// This method is called after the object
// is completely deserialized. Use it instead of the
// constructror.
[OnDeserialized]
void OnDeserialized(StreamingContext context)
{
fullName = firstName + " " + lastName;
}
但是看起來他們都是的deserialisation後觸發。
是否必須切換到XML序列化?
在應用程序序列化之前,這應該已經發生了。所以再這樣做會是錯誤的。 –
是的,使用'OnDeserialized'方法可以初始化字段。在此之前,沒有人可以訪問字段/屬性。 –
@HansPassant反序列化獨立發生。在程序的執行過程中,我只加載序列化數據並想將其反序列化爲一個對象。在反序列化之前甚至沒有發生序列化(在這個程序的例子中)。我不太確定在此之前我將如何調用構造函數。 – null