Reading keyvalue pairs into dictionary from app.config configSection

后端 未结 3 1393
北海茫月
北海茫月 2021-01-30 17:13

I currently have an app.config in an application of mine set up like so:

 

  

        
相关标签:
3条回答
  • 2021-01-30 17:20

    You are almost there - you just have nested your MajorCommands a level too deep. Just change it to this:

    <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>
    

    And then the following will work for you:

    var section = (Hashtable)ConfigurationManager.GetSection("MajorCommands");
    Console.WriteLine(section["Reset"]);
    

    Note that this is a Hashtable (not type safe) as opposed to a Dictionary. If you want it to be Dictionary<string,string> you can convert it like so:

    Dictionary<string,string> dictionary = section.Cast<DictionaryEntry>().ToDictionary(d => (string)d.Key, d => (string)d.Value);
    
    0 讨论(0)
  • 2021-01-30 17:23

    I would probably treat the config file as an xml file.

    Dictionary<string, string> myDictionary = new Dictionary<string, string>();
    XmlDocument document = new XmlDocument();
    document.Load("app.config");
    XmlNodeList majorCommands = document.SelectNodes("/configuration/DeviceSettings/MajorCommands/add");
    
    foreach (XmlNode node in majorCommands)
    {
        myDictionary.Add(node.Attributes["key"].Value, node.Attributes["value"].Value)
    }
    

    If document.Load doen't work, try converting your config file to xml file.

    0 讨论(0)
  • 2021-01-30 17:37

    using ConfigurationManager class you can get whole section from app.config file as Hashtable which you can convert to Dictionary if you want to:

    var section = (ConfigurationManager.GetSection("DeviceSettings/MajorCommands") as System.Collections.Hashtable)
                     .Cast<System.Collections.DictionaryEntry>()
                     .ToDictionary(n=>n.Key.ToString(), n=>n.Value.ToString());
    

    you'll need to add reference to System.Configuration assembly

    0 讨论(0)
提交回复
热议问题