Я пытаюсь реализовать универсальный способ чтения разделов из файла конфигурации. Файл конфигурации может содержать «стандартные» разделы или «пользовательские» разделы, как показано ниже.
<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. Как это можно сделать?
Исправления / предложения приветствуются.
Спасибо.