2013-08-23 54 views
7

我還沒有看到滿意的答案,所以想我會問。是否有將UI設置存儲在文件中的最佳做法?是否存在將UI設置存儲在文件中的最佳做法?

這種情況是,我們有一個內部的C#應用​​程序,我想存儲文件/文件夾數組以及其他隨機事件(執行外部命令時使用的標誌,傳遞給可選比較算法的可選參數等)。由於這些值的性質,使用內置的app.config方法是行不通的。那麼在將半複雜設置存儲到設置文件時是否有任何最佳做法?

目前我存儲的最複雜的將是一個列表,其中需要存儲文件名,比較算法和參數文本。所以這不是全部簡單的鍵/值數據。

我在尋找的想法:

  • 佈局(前如果XML,值應在屬性VS node.value)
  • 格式(XML,YAML等)
  • 框架

這不會存儲敏感數據,所以安全性不是問題。

我目前正在尋找使用XmlDocument併爲每個不同的集合分開類。但我覺得現在應該有一些現有的框架。

謝謝!

+0

我覺得這是不是重複的答案,這個問題都描述一個將如何存儲WPF設置和/或文件的位置。我期待爲此存儲結構化設置和最佳做法。 –

+0

「最佳實踐」是「您對此有何看法?」的同義詞。這是正確的主題(因爲斟酌答案會造成麻煩)。 –

回答

2

你也可以定義一個自定義配置部分,然後把這些設置放在一個單獨的配置文件中,如果你不想混亂你的app.config。自定義配置模塊允許您爲自己的複雜設置定義一個結構,並將它們存儲在標準配置文件中。如果您使用過Entity Framework,Enterprise Library等,那麼您可能已經在文件的頂部看到了它們。在Google上進行快速搜索後,又出現了另一篇有關該主題的StackOverflow文章。

How to create custom config section in app.config

+0

我對這方面的想法很有意思。謝謝! –

9

你說得對,這樣的設置不應該存儲在app.config文件中。它只是增加了混亂。在這種情況下,最好創建另一個配置文件,正如您在票中提到的那樣。

您正打算將此配置文件構造爲XML文檔。這是一個好主意。這也意味着你的配置數據是結構化的。太好了。

我建議你去JSON。這可以讓你在運行時將配置設置加載到你的應用程序中,只需很少的幾行代碼。試試NewtonSoft.JSON(又名JSON.Net)。

您可以按照以下步驟來快速添加和使用的配置設置:

  1. 使用NewtonSoft.JSON NuGet包管理器
  2. 添加對該庫引用到您的項目和cs文件(使用NewtonSoft安裝。 Json)
  3. 爲您的配置設置創建一個C#類。對於重複塊,您可以使用List<string>或任何其他相關數據類型,即使是int - 因此您不必進行任何類型轉換。
  4. 讀取JSON文件轉換成字符串對象
  5. 使用JsonConvert.DeserializeObject()爲:

MyConfigSettings settings = JsonConvert.DeserializeObject<MyConfigSettings>(jsonString);

這裏MyConfigSettings是配置設置類。相應的成員必須聲明爲public屬性,並定義了正確的get; set;屬性。

這會將所有配置設置加載到settings對象。最好的部分是任何缺少的配置值都會自動跳過,所以你不必有任何複雜的解析算法。

要寫入配置值到一個JSON文件,你可以在settings對象填充值,並使用它們序列:

// Indented so that it looks readable when the config file is opened in editor like Notepad 
string data = JsonConvert.SerializeObject<MyConfigSettings>(settings, Formatting.Indented); 
// Now just store string object data to the config file 

注:這將需要淨4.0+

快速入門在this example中給出。

+0

爲此使用配置部分提供了一個開箱即用的解決方案,我認爲這遠遠不是最佳實踐。 – ivowiblo

+0

我喜歡這個解決方案,但正如ivowiblo提到的那樣,擁有一些開箱即用的東西更加理想。我覺得如果我不用C#編程,那麼我可能會實現這一點。 –

相關問題