1.1、自定义config结构(参考对应颜色标注),放到configuration根节点下:

<test>
<testInfos>
<testInfo aa="aaKeyStr1" bb="" />
<testInfo aa="aaKeyStr2" bb="" />
</testInfos>
<testC cc="ccStr" />
</test>

推荐独立文件引用:

将1.1中自定义config新建为xml文件,命名:test.config

configuration根节点下添加:

<test configSource="test.config" />

1.2、config文件下需添加对应配置:

configSections节点下添加,name为自定义config的根节点,type为根节点类的命名空间.类名, 命名空间:

<section name="test" type="CMDTest.TestConfigurationSection, CMDTest" />

2、创建根节点类TestConfigurationSection,继承ConfigurationSection,对应自定义config中test节点:

    public class TestConfigurationSection : ConfigurationSection
{
[ConfigurationProperty("testInfos", IsDefaultCollection = true)]
public TestInfoElementCollection ContractInfos
{
get
{
return (TestInfoElementCollection)base["testInfos"]; // 子列表节点
}
}
[ConfigurationProperty("testC", IsDefaultCollection = true)]
public TestCElement TestC
{
get
{
return (TestCElement)base["testC"]; // 单个子节点
}
}
}

3.1、(子节点为集合时使用)创建子节点Collection类,继承ConfigurationElementCollection,对应自定义config中testInfos节点:

    public class TestInfoElementCollection : ConfigurationElementCollection
{ protected override ConfigurationElement CreateNewElement()
{
return new TestInfoElement();
} protected override object GetElementKey(ConfigurationElement element)
{
return ((TestInfoElement)element).AA; // 指定AA属性为唯一索引
}
public override ConfigurationElementCollectionType CollectionType
{
get
{
return ConfigurationElementCollectionType.BasicMap;
}
}
protected override string ElementName
{
get
{
return "testInfo"; // 子节点名称
}
}
}

3.2、创建列表子元素类,继承ConfigurationElement(单个子节点均可继承此类),对应自定义config中testInfo节点:

    public class TestInfoElement : ConfigurationElement
{
[ConfigurationProperty("aa", IsRequired = true)] // 是否必填
public string AA
{
get
{
return (string)base["aa"]; // 节点属性名称
}
} [ConfigurationProperty("bb")]
public string BB
{
get
{
return (string)base["bb"];
}
}
}

4、(子节点为单个节点时使用)同3.2,对应自定义config中testC节点:

    public class TestCElement : ConfigurationElement
{
[ConfigurationProperty("cc", IsRequired = true)]
public string CC
{
get
{
return (string)base["cc"];
}
}
}

5、调用代码Demo:

var tcs = (TestConfigurationSection)ConfigurationManager.GetSection("test");
// 读取单个子节点
var testC = tcs.TestC;
// 读取list节点
Dictionary<string, string> list = new Dictionary<string, string>();
foreach (TestInfoElement item in tcs.ContractInfos)
{
list.Add(item.AA, item.BB);
}
var aa = list["aaKeyStr1"];

运行效果:

心得:我理解的自定义config无非就是将节点抽象成对象属性,对应的属性需继承相关父类进行读取,对象类的结构需与config结构对应;编写时遇到复杂的config需注意树的深度以及节点、属性对应名称,容易写错,需细心

附上示例源码地址:https://gitee.com/GongQun/TestRun/tree/develop/

如有错误,请指正,谢谢!

关于ConfigurationSection自定义config的简单使用的更多相关文章

  1. List<T>集合的Sort自定义排序用法简单解析

    List<T>集合的Sort自定义排序用法简单解析: 如下:一系列无序数字,如果想要他们倒序排列,则使用如下代码: 那么如何理解这段代码呢? (x,y)表示相邻的两个对象,如果满足条件:x ...

  2. python+selenium之自定义封装一个简单的Log类

    python+selenium之自定义封装一个简单的Log类 一. 问题分析: 我们需要封装一个简单的日志类,主要有以下内容: 1. 生成的日志文件格式是 年月日时分秒.log 2. 生成的xxx.l ...

  3. 释放SQL Server占用的内存 .Net 读取xml UrlReWriter 在web.config中简单的配置

    释放SQL Server占用的内存   由于Sql Server对于系统内存的管理策略是有多少占多少,除非系统内存不够用了(大约到剩余内存为4M左右),Sql Server才会释放一点点内存.所以很多 ...

  4. Python自定义线程类简单示例

    Python自定义线程类简单示例 这篇文章主要介绍了Python自定义线程类,结合简单实例形式分析Python线程的定义与调用相关操作技巧,需要的朋友可以参考下.具体如下: 一. 代码     # - ...

  5. Python+Selenium中级篇之8-Python自定义封装一个简单的Log类《转载》

    Python+Selenium中级篇之8-Python自定义封装一个简单的Log类: https://blog.csdn.net/u011541946/article/details/70198676

  6. 在.net中读写config文件的各种方法(自定义config节点)

    http://www.cnblogs.com/fish-li/archive/2011/12/18/2292037.html 阅读目录 开始 config文件 - 自定义配置节点 config文件 - ...

  7. .net 中读取自定义Config文件

    今天做一个windows插件式服务程序,插件有时要读取配置文件的设置,但是服务是动态加载到服务上的,没有办法作到动态修改服务的配置文件(app.config).在.net 2.0中有一个Configu ...

  8. salesforce 零基础学习(二十六)自定义图表chart简单介绍(使用apex和VF实现)

    chart在报表中经常使用到,他可以使报表结果更加直观的展现给用户.salesforce支持VF和apex代码来更好的展示chart. chart分类:常用的图表样式有饼状图,柱状图,折线图,条形图, ...

  9. iOS 实现Tabbarcontroller中间自定义样式 最简单的方法

    先上图: 如果我们要实现中间按钮自定义样式,方法应该蛮多,这里介绍一种最简单的. 1.创建类继承:UITabBarController,如下代码都是写在该类的 .m文件里 2.定义最中间的自定义样式, ...

随机推荐

  1. java基础总结(1)--深入理解基本数据类型

    深入理解java数据类型 java是一种强类型语言,这就意味着必须为每一个声明变量声明一种类型.在java中,一共有8种数据类型,其中4种整型,2种浮点类型,1种字符类型和一种表示真值的boolean ...

  2. 洛谷P1402——乒乓球

    原题链接: https://www.luogu.com.cn/problem/P1042 题面简述 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及.其中11分制 ...

  3. Selenium多层级的iframe中元素的定位

    很多时候我们遇到多层级的iframe就会想各种方法去获取iframe中的元素,但其实很简单就可以做到的,就是一级一级获取就可以了,获取至你需要的那个层级即可,下面看下实际的案例:(转) <fra ...

  4. Mysql数据库调优和性能优化的21条最佳实践

    Mysql数据库调优和性能优化的21条最佳实践 1. 简介 在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响.MySQL是目前使用最多的开 ...

  5. ERROR: Unrecognized command line argument: 'use'

    Unrecognized command line argument: 'use' gvm--GoLang语言多版本管理工具 基础环境 centos6.5 报错内容 gvm在命令行以外的任何地方调用 ...

  6. java 获取当前年份 月份 日期

    import java.util.Calendar; public class Main {  public static void main(String[] args) {    Calendar ...

  7. Netty学习——基于netty实现简单的客户端聊天小程序

    Netty学习——基于netty实现简单的客户端聊天小程序 效果图,聊天程序展示 (TCP编程实现) 后端代码: package com.dawa.netty.chatexample; import ...

  8. 鲲鹏性能优化十板斧(二)——CPU与内存子系统性能调优

    1.1 CPU与内存子系统性能调优简介 调优思路 性能优化的思路如下: l   如果CPU的利用率不高,说明资源没有充分利用,可以通过工具(如strace)查看应用程序阻塞在哪里,一般为磁盘,网络或应 ...

  9. 机器学习笔记(六) ---- 支持向量机(SVM)

    支持向量机(SVM)可以说是一个完全由数学理论和公式进行应用的一种机器学习算法,在小批量数据分类上准确度高.性能好,在二分类问题上有广泛的应用. 同样是二分类算法,支持向量机和逻辑回归有很多相似性,都 ...

  10. 学习ThinkPHP的第20天--MySQL事务操作、查询事件、一对一关联

    之所以从20天才开始写随笔记是因为之前没搞自己的博客 从20天开始记录我在ThinkPHP中的点点滴滴 1.MySQL事务操作 /**事务操作*/ //startTrans启动事务.rollback回 ...