开发程序的过程中,有时候我们需要自己编写一个config文件,比如取名App.config, 然后写一些配置信息在里面。然后我们需要编写C#代码来对这个配置文件进行读写

比如:App.Config

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

可以看出在这个配置文件中,我们自己定义了一个section => mySection,这里自定义的section都需要从ConfigurationSection中继承, 所以我们写一个MySection类,从ConfigurationSection中继承

using System;
using System.Configuration; 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; }
}
} }

读取App.config file中的section

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

往App.config中写section

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var mySection = config.GetSection("mySection") as MySection; mySection.KeyValues.Clear();
mySection.KeyValues.Add(new MySection.MyKeyValueSetting() { Key = "aaaaaa", Value = "ddddddd" }); config.Save();
ConfigurationManager.RefreshSection("mySection"); //刷新

最新文章

  1. 【leetcode】Longest Common Prefix
  2. github无法访问?试试修改hosts
  3. wpf arcglobe +c# 三维缩放到图层
  4. 允许浏览器跨域访问web服务端的解决方案
  5. (新人的第一篇博客)树状数组中lowbit(i)=i&amp;(-i) 的简单文字证明
  6. JS中cookie的基本使用
  7. Linux 命令 - lsof: 列出打开的文件
  8. 将less编译成css的gulp插件
  9. Jquery第二篇【选择器、DOM相关API、事件API】
  10. 伸展树Splay【非指针版】
  11. Java语言的简单基础
  12. Python函数的定义与调用、返回值、参数
  13. Linux 小知识翻译 - 「小型移动式PC」
  14. oracle查看锁表进程,杀掉锁表进程[转载]
  15. 【Java】使用Apache POI生成和解析Excel文件
  16. SparkSession
  17. Redis 授权操作
  18. 最简单的rman操作
  19. asp.net core集成MongoDB
  20. SQL语法 之 操作语句

热门文章

  1. Linux电源管理(3)-Generic PM之reboot过程【转】
  2. asp.net ajax实现md5加密
  3. phalcon:官方多模块支models层,mode数据库配置(二)
  4. C#winform拖拽实现获得文件路径
  5. Java企业微信开发_04_消息推送之发送消息(主动)
  6. Netty组件理解(转载)
  7. windows 安装 pytorch
  8. 《java编程思想》:字符串
  9. stl_slist.h
  10. Android之ExpandableList扩展用法(基于BaseExpandableListAdapter)