C#中读写自定义的web 配置文件

开发程序的过程中,有时候我们需要自己编写一个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");  //刷新

 

posted on   新西兰程序员  阅读(262)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2016-07-04 转载 ASP.NET中如何取得Request URL的各个部分
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示