c# wpf xml dictionary app-config

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