我試圖實現通用方式從配置文件中讀取節。配置文件可能包含如下的「標準」部分或「自定義」部分。閱讀配置節的通用方法
<configuration>
<configSections>
<section name="NoteSettings" type="System.Configuration.NameValueSectionHandler"/>
</configSections>
<appSettings>
<add key="AutoStart" value="true"/>
<add key="Font" value="Verdana"/>
</appSettings>
<NoteSettings>
<add key="Height" value="100"/>
<add key="Width" value="200"/>
</NoteSettings>
,我試過的方法如下:
private string ReadAllSections()
{
StringBuilder configSettings = new StringBuilder();
Configuration configFile = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
foreach (ConfigurationSection section in configFile.Sections)
{
configSettings.Append(section.SectionInformation.Name);
configSettings.Append(Environment.NewLine);
if (section.GetType() == typeof(DefaultSection))
{
NameValueCollection sectionSettings = ConfigurationManager.GetSection(section.SectionInformation.Name) as NameValueCollection;
if (sectionSettings != null)
{
foreach (string key in sectionSettings)
{
configSettings.Append(key);
configSettings.Append(" : ");
configSettings.Append(sectionSettings[key]);
configSettings.Append(Environment.NewLine);
}
}
}
configSettings.Append(Environment.NewLine);
}
return configSettings.ToString();
}
假設所有的自定義欄目將只有鍵值
- 是這樣的實現可能?如果是的話,有沒有比這個更清潔更優雅的解決方案?
- 上述方法還讀取'不可見'部分,如mscorlib,system.diagnostics。這是可以避免的嗎?
- System.Data.Dataset返回無法轉換爲NameValueCollection的數據集。這怎麼處理?
更正/建議歡迎。
謝謝。
這真是棒極了! – codechurn 2012-10-03 21:07:21