簡體   English   中英

何時使用XmlSerializer.Deserialize進行反序列化時調用類構造函數?

[英]When is the class constructor called while deserialising using XmlSerializer.Deserialize?

我的應用程序使用XmlSerializer保存一個類,然后在需要時通過再次反序列化來創建一個實例。 我想在我的構造函數邏輯中使用我的類的一些屬性成員(在反序列化期間分配)。 可以假設首先分配屬性,並且一旦分配了所有屬性,就會調用構造函數嗎?

繼續討論這個主題,是否有關於反序列化過程中發生的事件序列的文檔?

不,假設在構造函數運行時將設置屬性是不行的。 反之亦然。 構造函數是在創建對象實例時運行的第一段代碼。 在構造函數開始執行之前,不可能設置屬性。

XML反序列化過程大致如下所示

  • 調用無參數構造函數
  • 將屬性設置為其反序列化的值

解決此問題的方法是使用工廠方法執行反序列化,然后運行取決於所設置屬性的邏輯。 例如

class MyClass {
  ...
  public static MyClass Deserialize(string xmlContents) {
    var local = ... // Do the XML deserialization
    local.PostCreateLogic();
    return local;
  }
}

構造函數是對象的創建。 在分配屬性值之前,需要創建對象。 然后,將首先調用構造函數。

我不知道序列的任何文檔。 但如果你的課程不是那么大,可以添加一些斷點,你會看到哪些事件是第一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM