簡體   English   中英

在C#中從序列化XML加載對象的最佳實踐

[英]Best Practice for Loading Object from Serialized XML in C#

問候,

我有一個可以從文件構造的特定對象,例如:

public class ConfigObj
{
     public ConfigObj(string loadPath)
     {
          //load object using .Net's supplied Serialization library
          //resulting in a ConfigObj object
          ConfigObj deserializedObj = VoodooLoadFunction(loadpath); 

          //the line below won't compile
          this = thisIsMyObj; 
     }
}

我想本質上說:“好,現在我們剛剛反序列化了這個對象,這實際上就是我們想要的對象。” 有幾種方法可以做到這一點,我想知道哪種方法是最佳實踐。 我的想法是:

  • 構建一個復制到我的函數,該函數逐字段復制對象。 這是當前的實現,我很確定這是一個可怕的主意,因為每當將一個新成員添加到該對象時,我還需要記住將其添加到“ copy-toto-me”功能中,因此無法維護。
  • 為ConfigObj類構建一個靜態方法,該方法充當用於加載對象的實際構造方法。 這聽起來好多了,但不是最佳實踐。

我對這兩個都不滿意。 這里公認的最佳實踐是什么?

第二種選擇是所謂的工廠方法 ,這是一種常見的設計技術。 如果您確實使用了此技術,則可能會發現在實際加載該類之前需要知道要加載的類的類型。 如果遇到這種情況,則可以使用更高級別的工廠類型來查看流,並為適當的類類型調用工廠方法。

使用靜態方法而不是構造函數沒有什么錯。 實際上,它具有許多優點

我總是選擇靜態方法。 通常,它是一種已加載的層次結構,因此只有根對象才需要該方法。 在.NET框架(例如Graphics.FromImage)中,這並不是一種異常的方法,因此對於您的類用戶來說應該沒問題。

暫無
暫無

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

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