c# - Lectura de pares de valores clave en el diccionario de app.config configSection
wpf xml (3)
Probablemente trataría el archivo de configuración como un archivo xml.
Dictionary<string, string> myDictionary = new Dictionary<string, string>();
XmlDocument document = new XmlDocument();
document.Load("app.config");
XmlNodeList mejorCommands = doc.SelectNodes("/configuration/DeviceSettings/MajorCommands/add");
foreach (XmlNode node in majorCommands)
{
myDictionary.Add(node.Attributes["key"].Value, node.Attributes["value"].Value)
}
Si document.Load no funciona, intente convertir su archivo de configuración a xml.
Actualmente tengo una app.config en una aplicación de la mía configurada así:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="DeviceSettings">
<section name="MajorCommands" type="System.Configuration.DictionarySectionHandler"/>
</sectionGroup>
</configSections>
<appSettings>
<add key="ComPort" value="com3"/>
<add key="Baud" value="9600"/>
<add key="Parity" value="None"/>
<add key="DataBits" value="8"/>
<add key="StopBits" value="1"/>
<add key="Ping" value="*IDN?"/>
<add key="FailOut" value="1"/>
</appSettings>
<DeviceSettings>
<MajorCommands>
<add key="Standby" value="STBY"/>
<add key="Operate" value="OPER"/>
<add key="Remote" value="REMOTE"/>
<add key="Local" value="LOCAL"/>
<add key="Reset" value="*RST" />
</MajorCommands>
</DeviceSettings>
</configuration>
Mi objetivo actual es foreach o simplemente leer todos los valores de MajorCommands en un Dictionary<string, string>
formateado como Dictionary<key, value>
. He intentado varios enfoques diferentes utilizando System.Configuration, pero ninguno parece funcionar y no he podido encontrar ningún detalle para mi pregunta exacta. ¿Hay alguna forma adecuada de hacer esto?
Ya casi estás allí: acabas de anidar tus Comandos Principales un nivel demasiado profundo. Solo cámbialo a esto:
<configuration>
<configSections>
<section
name="MajorCommands"
type="System.Configuration.DictionarySectionHandler" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<MajorCommands>
<add key="Standby" value="STBY"/>
<add key="Operate" value="OPER"/>
<add key="Remote" value="REMOTE"/>
<add key="Local" value="LOCAL"/>
<add key="Reset" value="*RST" />
</MajorCommands>
</configuration>
Y a continuación, lo siguiente funcionará para usted:
var section = (Hashtable)ConfigurationManager.GetSection("MajorCommands");
Console.WriteLine(section["Reset"]);
Tenga en cuenta que esto es una Hashtable (no escriba safe) en lugar de un Dictionary. Si quieres que sea Dictionary<string,string>
puedes convertirlo así:
Dictionary<string,string> dictionary = section.Cast<DictionaryEntry>().ToDictionary(d => (string)d.Key, d => (string)d.Value);
utilizando la clase ConfigurationManager
puede obtener toda la sección del archivo app.config
como Hashtable
que puede convertir a Dictionary
si lo desea:
var section = (ConfigurationManager.GetSection("DeviceSettings/MajorCommands") as System.Collections.Hashtable)
.Cast<System.Collections.DictionaryEntry>()
.ToDictionary(n=>n.Key.ToString(), n=>n.Value.ToString());
Deberá agregar una referencia al ensamblaje System.Configuration