c# 读写自定义配置文件

自定义类型,从 ConfigurationSection 继承:

 public class MySection : ConfigurationSection    // 所有配置节点都要选择这个基类
{
        private static 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); }
                set { base[name] = value; }
            }

            // 下面二个方法中抽象类中必须要实现的。
            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; }
            }
        }

    }

配置节点

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="mySection" type="test.MySection, test"/>
  </configSections>
  <mySection>
    <add key="user" value="aaa" />
    <add key="user1" value="bbb" />
  </mySection>
</configuration>

读:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            var mySection = config.GetSection("mySection") as WcfHost.MySection;
            foreach (WcfHost.MySection.MyKeyValueSetting add in mySection.KeyValues) {
               Console.WriteLine(string.Format("{0}-{1}", add.Key, add.Value));
            }

写:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            var mySection = config.GetSection("mySection") as WcfHost.MySection;

            mySection.KeyValues.Clear();
            mySection.KeyValues.Add(new MySection.MyKeyValueSetting() { Key = "aaaaaa", Value = "ddddddd" });

            config.Save();
            ConfigurationManager.RefreshSection("mySection");  //刷新
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值