Search code examples
c#setcollectionssetting

C# AppSettings: Is there a easy way to put a collection into <appSetting>


i tried

<appSettings >
    <add key="List" value="1"/>
    <add key="List" value="2"/>
    <add key="List" value="3"/>
  </appSettings >

and System.Configuration.ConfigurationManager.AppSettings.GetValues("List");

But i only get the last member . How could i solve this easily?


Solution

  • I have dealt a similar issue and I did it with this code. Hope this helps in your problem.

    In this case List (similar to my URLSection) will have a full configuration Section in web.config which you can get all values from this section then.

    <configSections>
        <section name="URLSection" type="A.WebConfigSection,A,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null"/>
    </configSections>
    
    <appSettings></appSettings>
    
    <URLSection>
        <urlCollection>
            <add url="1" value="a"/>
            <add url="2" value="b"/>
        </urlCollection>
    </URLSection>
    

    I made three classes for this: ConfigElement, ConfigElementCollection, WebConfigSection.

    ConfigElement

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Configuration;
    
    namespace A
    {
      public class ConfigElement:System.Configuration.ConfigurationElement
    {
        [ConfigurationProperty("url",IsRequired=true) ]
        public string url
        {
            get
            {
                return this["url"] as string;
            }
        }
    
        [ConfigurationProperty("value", IsRequired = true)]
        public string value
        {
            get
            {
                return this["value"] as string;
            }
        }
    
    
    
      }
    }
    

    ConfigElementCollection

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Configuration;
    
    namespace A
    {
      public class ConfigElementCollection:ConfigurationElementCollection
     {
        public ConfigElement this[int index]
        {
            get
            {
                return base.BaseGet(index) as ConfigElement;
            }
    
        }
    
        protected override ConfigurationElement CreateNewElement()
        {
            return new ConfigElement();
        }
    
        protected override object GetElementKey(ConfigurationElement element)
        {
            return ((ConfigElement)(element)).url;
        }
     }
    }
    

    WebConfigSection

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Configuration;
    
    namespace A
    {
     public class WebConfigSection:ConfigurationSection
     {
    
        public WebConfigSection()
        {
    
        }
    
        [ConfigurationProperty("urlCollection")]
        public ConfigElementCollection allValues
        {
            get
            {
                return this["urlCollection"] as ConfigElementCollection;
            }
        }
    
        public static WebConfigSection GetConfigSection()
        {
            return ConfigurationSettings.GetConfig("URLSection") as WebConfigSection;
        }
     }
    }