博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Config程序配置文件操作实践进阶之ConfigurationSectionGroup
阅读量:6923 次
发布时间:2019-06-27

本文共 2743 字,大约阅读时间需要 9 分钟。

今天又进一步对System.Configuration下的ConfigurationSectionGroup类及相关的类与方法进行了研究。发现要构建多层次嵌套的XML标签 则必须用到ConfigurationSectionGroup类

我们看一下下面这个XML文件:



可以发现只要是ConfigurationSectionGroup一样会出现在区域的声明部分<configSections>的标签内。以显示出所有Section的层次。

然后在下面则按上这个层次的所有Section内容。

使用ConfigurationSectionGroup对象非常方便。

一、创建有多个层次嵌套的XML

1、直接使用ConfigurationSectionGroup或写一个类继承ConfigurationSectionGroup。在这个类中无法像Section和元素一样添加属性。

2、将Section添加到ConfigurationSectionGroup中。如果是多个层次嵌套的,还可以将ConfigurationSectionGroup对象添加到ConfigurationSectionGroup对象中。这就像数组中还有数组一样。

3、将最顶层的ConfigurationSectionGroup对象添加到Configuration中。

二、如果读取有ConfigurationSectionGroup对象的内容

1、在读取有ConfigurationSectionGroup对象的时候我们可以用Configuration.GetSectionGroup("GroupName")来得到它,记得要将得到的Group转换为相对应的继承于ConfigurationSectionGroup的那个类。

2、得到相应的继承于ConfigurationSectionGroup类的对象后,可以用ConfigurationSectionGroup.Sections.Count得到这个Group下Section的数量,用ConfigurationSectionGroup.Sections[0].SectionInformation.Name 得到Section的名字

例如:得到示例XML中MyGroup对象的Name和AppSectionB对象的Name的代码为:

((AppGroup)cfg.GetSectionGroup("MyGroup")).Name;((AppSectionB)cfg.GetSectionGroup("MyGroup").SectionGroups[0].Sections[1]).KeyName

三、关于在一个Section下有多个元素

如果有多个元素,必须用一个用户类来继承ConfigurationElementCollection。不要试图在继承于Section类的自定义类中用AppElement的数组方式。因为ConfigurationManager无法从XML中读取到不被ConfigurationElementCollection对象包含的元素数组。

一个很直观的例子就是.NET预定义的二个对象:Configuration.AppSettings.Settings 和 Configuration..ConnectionStrings.ConnectionStrings 其中我们看到AppSettings和ConnectionStrings是继承于Section类的对象,Settings 和 ConnectionStrings  则是继承于ConfigurationElementCollection的对象。所以我们在设置XML的结构中应该参数它这个的形式,且目前来看也没有其它办法可以读取到不被ConfigurationElementCollection包含的元素。

四、关于Configuration.SectionGroups.Count 和 Configuration.Sections.Count

如果你的Section对象是直接加到Configuration中去的,那么这个时候你可能要杯具了。因为由于Configuration中存在了很多.NET预定义好的Section和Group所以你用Configuration.SectionGroups.Count将得到10。Configuration.Sections.Count将得到22。这个时候你千万不要奇怪和郁闷,可以使用Configuration.GetSectionGroup(GroupName)先得到顶层的你定义的那个Group,之后在这个Group下面的SectionGroups.Count 和 Sections.Count 将是正常的。

换句话说就是你无法直接从Configuration的GetSectionGroup() 及 GetSection() 这两个方法得到不属于顶层的对象。

转载于:https://www.cnblogs.com/kevinGao/p/4188739.html

你可能感兴趣的文章
SCOM2012部署系列之八:启用审核收集(ACS)
查看>>
自适应哈希索引引起的不定时MySQL崩溃重启
查看>>
zabbix企业应用之监控docker容器资源情况
查看>>
Exchange 2016集成ADRMS系列-6:域内OWA客户端测试
查看>>
python常用的几种GUI解析
查看>>
360公司面试记
查看>>
深入浅出OOP(二): 多态和继承(继承)
查看>>
51CTO学院四周年优秀讲师评选中,需要您的宝贵一票
查看>>
OpenBSD,FreeBSD,Linux硬盘速度对比
查看>>
财务自由之路——为什么选择淘宝(上)
查看>>
酷派+乐视能否再造一个“苹果生态”
查看>>
Linux双机热备解决方案之Heartbeat
查看>>
Express.js中的locals用法
查看>>
Linux operating system (Ubuntu) 学习-2
查看>>
编译原理--正规式和有限自动机
查看>>
web前端开发工具
查看>>
如何阅读一本书
查看>>
asp.net 画 数据图表
查看>>
PHP中集成PayPal标准支付
查看>>
使用数据集和XML
查看>>