天天看點

C#讀取App.config裡面的自定義節點集合

資料讀取類:

namespace Synchronize

{

    class Read: ConfigurationSection

    {

        private static readonly ConfigurationProperty s_property

       = new ConfigurationProperty(string.Empty, typeof(MyKeyValueCollection), null,

                                       ConfigurationPropertyOptions.IsDefaultCollection);

        [ConfigurationProperty("", Options = ConfigurationPropertyOptions.IsDefaultCollection)]

        public MyKeyValueCollection KeyValues

        {

            get

            {

                return (MyKeyValueCollection)base[s_property];

            }

        }

    }

    [ConfigurationCollection(typeof(MyKeyValueSetting))]

    public class MyKeyValueCollection : ConfigurationElementCollection        // 自定義一個集合

    {

        // 基本上,所有的方法都隻要簡單地調用基類的實作就可以了。

        public MyKeyValueCollection() : base(StringComparer.OrdinalIgnoreCase)    // 忽略大小寫

        {

        }

        // 其實關鍵就是這個索引器。但它也是調用基類的實作,隻是做下類型轉就行了。

        new public MyKeyValueSetting this[string name]

        {

            get

            {

                return (MyKeyValueSetting)base.BaseGet(name);

            }

        }

        // 下面二個方法中抽象類中必須要實作的。

        protected override ConfigurationElement CreateNewElement()

        {

            return new MyKeyValueSetting();

        }

        protected override object GetElementKey(ConfigurationElement element)

        {

            return ((MyKeyValueSetting)element).Key;

        }

        // 說明:如果不需要在代碼中修改集合,可以不實作Add, Clear, Remove

        //public void Add(MyKeyValueSetting setting)

        //{

        //    this.BaseAdd(setting);

        //}

        //public void Clear()

        //{

        //    base.BaseClear();

        //}

        //public void Remove(string name)

        //{

        //    base.BaseRemove(name);

        //}

    }

    public class MyKeyValueSetting : ConfigurationElement    // 集合中的每個元素

    {

        [ConfigurationProperty("key", IsRequired = true)]

        public string Key

        {

            get { return this["key"].ToString(); }

            set { this["key"] = value; }

        }

        [ConfigurationProperty("value", IsRequired = true)]

        public string Value

        {

            get { return this["value"].ToString(); }

            set { this["value"] = value; }

        }

    }

}

調用:

 Read read= (Read)ConfigurationManager.GetSection("Data_Extraction");

            //擷取自定義config中的全部值

            string[] allExtraction = (from kv in read.KeyValues.Cast<MyKeyValueSetting>()

                                      let s = string.Format("{0}={1}", kv.Key, kv.Value)

                                      select s).ToArray(); //讀取的k,v值會被存放在string[]數組中

string str = string.Join("\r\n",

                                    (from kv in read.KeyValues.Cast<MyKeyValueSetting>()

                                     let s = string.Format("{0}={1}", kv.Key, kv.Value)

                                     select s).ToArray()); //讀取的k,v值會被存放在字元串中

            Hashtable check = new Hashtable();

            for (int j = 0; j < allExtraction.Length; j++)

            {

                string[] sArray = allExtraction[j].Split('=');

                check.Add(sArray[0], sArray[1]);

            }