Search code examples
c#.netconfigurationconfigurationsectioncustom-configuration

Read web.config section to List


I have this in a web.config :

<MySection>
    <Setting1 Value="10" />
    <Setting2 Value="20" />
    <Setting3 Value="30" />
    <Setting4 Value="40" />
</MySection>

I'd like read the all section "MySection" and get all value to a List<string> (ex : "10","20","30")

Thanks,


Solution

  • First of all, I recommend use to use Unity Configuration.

    Code:

    public class MySection : ConfigurationSection
    {
        protected static ConfigurationPropertyCollection properties = new ConfigurationPropertyCollection();
    
        private static ConfigurationProperty propElements = new ConfigurationProperty("elements", typeof(MyElementCollection), null, ConfigurationPropertyOptions.IsRequired | ConfigurationPropertyOptions.IsDefaultCollection);
    
        static BotSection()
        {
            properties.Add(propElements);
        }
    
        [ConfigurationProperty("elements", DefaultValue = null, IsRequired = true)]
        [ConfigurationCollection(typeof(MyElementCollection), AddItemName = "add", ClearItemsName = "clear", RemoveItemName = "remove")]
        public MyElementCollection Elements
        {
            get
            {
                return (MyElementCollection)this[propElements];
            }
            set
            {
                this[propElements] = value;
            }
        }
    }
    
    public class MyElementCollection : ConfigurationElementCollection, 
                                       IEnumerable<ConfigurationElement> // most important difference with default solution
    {
        public void Add(MyElement element)
        {
            base.BaseAdd(element);
        }
    
        public void Clear()
        {
            base.BaseClear();
        }
    
        protected override ConfigurationElement CreateNewElement()
        {
            return new MyElement();
        }
    
        protected override object GetElementKey(ConfigurationElement element)
        {
            return ((MyElement)element).Id;
        }
    
        IEnumerator<MyElement> IEnumerable<MyElement>.GetEnumerator()
        {
            return this.OfType<MyElement>().GetEnumerator();
        }
    }
    
    public class MyElement : ConfigurationElement
    {
        protected static ConfigurationPropertyCollection properties = new ConfigurationPropertyCollection();
    
        private static ConfigurationProperty propValue= new ConfigurationProperty("value", typeof(int), -1, ConfigurationPropertyOptions.IsRequired);
    
        public int Value
        {
            get
            {
                return (int)this[propValue];
            }
            set
            {
                this[propValue] = value;
            }
        }
    }
    

    Config:

    <configuration>
        <configSections>
            <section name="MySection" type="MySection, MyAssembly"/>
        </configSections>
        <MySection>
            <elements>
                <clear />
                <add value="10" />
                <remove value="10" />
                <add value="20" />
                <add value="30" />
            </elements>
        </MySection>
    </configuration>