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]);
            }

猜你喜欢

转载自blog.csdn.net/touhousonic/article/details/79125146