2013-03-13 43 views
3

我可以使用.Net ConfigurationManager存儲字符串,但是如何存儲結構化數據?如何使用ConfigurationManager存儲結構化數據?

例如,我可以這樣做:

conf = ConfigurationManager.OpenExeConfiguration(...) 
string s = "myval"; 
conf.AppSettings.Settings["mykey"].Value = s; 
conf.Save(ConfigurationSaveMode.Modified); 

而且我想這樣做:

class myclass { 
    public string s; 
    int i; 
    ... more elements 
}; 

myclass c = new myclass(); c.s = "mystring"; c.i = 1234; ... 

conf.AppSettings.Settings["mykey"] = cc; 
conf.Save(ConfigurationSaveMode.Modified); 

如何存儲和檢索與ConfigurationManager中的結構化數據?

我實施了@sll建議的解決方案。但是之後的困難是爲配置創建一個新的部分。這是如何完成的: How to Write to a User.Config file through ConfigurationManager?

回答

2

您可以通過繼承ConfigurationSection類來創建自己的配置節類型,並使用它來保存/加載任何自定義類型信息。

MSDN:How to: Create Custom Configuration Sections Using ConfigurationSection

BTW,這可能是你或他人有用的一個建議是:一件好事是使自定義配置部分類immutable(沒有公共setter方法),這樣你可以肯定的是配置上不能改變任何階段的應用程序生命週期,但如果你決定編寫單元測試的代碼依賴於配置節類,並需要部分存根與一些測試值,你可能卡住abilty設置屬性值,因爲沒有setters。解決方案提供了一個新類,它繼承自您的剖面類,並使用受保護的索引器在下面的show中指定構造函數值:

public class TestSectionClass: MyConfigurationSection 
{ 
    public TestSectionClass(string testUserName) 
    { 
     this["userName"] = testUserName; 
    } 
} 
+0

那就是我正在尋找的。想想,也許配置管理器有某種內置的序列化... – niteskate 2013-03-13 10:59:12

+0

不確定序列化,我喜歡自定義配置節的方法是指定默認值,有強大的解決方案,清晰和人類可讀的配置文件 – sll 2013-03-13 11:03:23

1

Serialization

有很多不同的序列化數據的方法,所以你需要選擇一個。但是.NET提供了一個適用於很多情況的序列化API,並且在最近使用Web AJAX調用時,我發現自己使用JavaScriptSerializer來將事情轉化爲JSON。但是有第三方庫,如protobuf-net等。

這裏的關鍵在於本質上將數據轉換爲字節或字符串表示形式,以後可以將其反序列化爲其原始結構,從而允許您將其存儲在介質之間的介質中,例如在配置文件中或通過網絡傳輸等。

根據@ sll的回答,.NET有另一個方面,它可以處理數據進出自定義配置部分的序列化;無論你是否想爲此目的明確指定類型,都是你的呼叫。底線是相同的,序列化,不知何故。

+0

True!不知道JavaScriptSerializer類。像你一樣,我現在也傾向於經常使用JSON。從現在起,使用這樣一個有用的課程對我來說是非常誘人的。 :-) – niteskate 2013-03-13 13:04:58