array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 在.net中使用强类型来读取配置信息 - 爱码网
 本文来自  http://achilleshuang.cnblogs.com/archive/2005/11/27/dotNetConfiguration.html

在.net应用中,配置信息以XML文档的形式来存储。依.net的惯例,web.config为Asp.net应用(包括Web Service应用)提供配置信息;而*.exe.config为可执行的应用(包括控制台、Windows服务、Windows桌面应用程序)提供配置信息,其中的“*”代表易用的程序集名称,例如App.exe程序集的对应配置文件为App.exe.config。

1、使用默认方法读取
    
    在代码中使用System.Configuration名称空间中的ConfigurationManager即可方便地对配置进行读取(1.1版使用ConfigurationSettings),比如,用如下代码就可以读取一条配置信息:
在.net中使用强类型来读取配置信息string portNumber = ConfigurationManager.AppSettings["PortNumber"];

    这段代码读取配置文件AppSetting段中的如下信息:

在.net中使用强类型来读取配置信息<appSettings>
在.net中使用强类型来读取配置信息    
<add key="PortNumber" value="4532"/>
在.net中使用强类型来读取配置信息
</appSettings>

    确实够简单,但是如果我的配置信息更为复杂呢,比如说分为如下的层次:

在.net中使用强类型来读取配置信息<Servers>
在.net中使用强类型来读取配置信息    
<DbServer>
在.net中使用强类型来读取配置信息        
<Address>10.1.1.1</Address>
在.net中使用强类型来读取配置信息        
<PortNumber>9797</PortNumber>
在.net中使用强类型来读取配置信息    
</DbServer>
在.net中使用强类型来读取配置信息    
<AppServer>
在.net中使用强类型来读取配置信息        
<Address>10.1.1.2</Address>
在.net中使用强类型来读取配置信息        
<PortNumber>5203</PortNumber>
在.net中使用强类型来读取配置信息    
</AppServer>
在.net中使用强类型来读取配置信息
</Servers>

    那边某君回答:“这照样可以一字排开啊”--那么层次更加复杂的呢?嘿嘿,没招了吧。当然有招,我们可以建立强类型的读取类来处理,任你多么复杂也不在话下,哼哼。

2、使用强类型来读取
    
    在.net中,配置文件中的所有信息都经由IconfigurationSectionHandler接口读出。该接口只有一个方法:

在.net中使用强类型来读取配置信息object Create (object parent, object configContext, XmlNode section)
    
    通过这个方法,IconfigurationSectionHandler接口读取信息并把它们转换成程序易于使用的形式。
    首先让我们来看一个简单的配置文件:

在.net中使用强类型来读取配置信息<?xml version="1.0" encoding="utf-8" ?>
在.net中使用强类型来读取配置信息
<configuration>
在.net中使用强类型来读取配置信息    
<configSections>
在.net中使用强类型来读取配置信息        
<section name="DbServer" type=""/>
在.net中使用强类型来读取配置信息        
<section name="AppServer" type=""/>
在.net中使用强类型来读取配置信息    
</configSections>
在.net中使用强类型来读取配置信息
<!--上面是段处理器部分-->
在.net中使用强类型来读取配置信息
<!--下面是段内容部分-->
在.net中使用强类型来读取配置信息    
<appSettings>
在.net中使用强类型来读取配置信息        
<add key="PortNumber" value="4532"/>
在.net中使用强类型来读取配置信息    
</appSettings>
在.net中使用强类型来读取配置信息    
<DbServer>
在.net中使用强类型来读取配置信息          
<Address>10.1.1.1</Address>
在.net中使用强类型来读取配置信息          
<PortNumber>9797</PortNumber>
在.net中使用强类型来读取配置信息    
</DbServer>
在.net中使用强类型来读取配置信息    
<AppServer>
在.net中使用强类型来读取配置信息          
<Addr>10.1.1.2</Addr>
在.net中使用强类型来读取配置信息          
<Port>5203</Port>
在.net中使用强类型来读取配置信息    
</AppServer>
在.net中使用强类型来读取配置信息
</configuration>

    如上面所示,除根节点(<configuration>)外,配置数据分为两部分:段处理器(section handler,指节点<configSections>中的所有内容)部分和段内容(section,除<configSections>节点外的内容)部分。
    段处理器部分为给段的内容制定相应的数据处理类,即在<section>节点中,type属性描述的类(前面为包括名称空间的类名,后面为程序集名,使用逗号分隔)被指定用于处理name属性描述的段内容。
    那么,段处理器如何处理相应段的内容呢?原来,<configSections>定义的每一个处理器类都必须实现IconfigurationSectionHandler接口,当执行下列代码时,CLR将通过两个步骤获得一个处理器:
   
在.net中使用强类型来读取配置信息object DbServerConfig = ConfigurationManager.GetSection("DbServer");

    首先,CLR在配置文件的段处理器部分找到与“DbServer”相应的段处理器描述,并通过反射机制创建一个处理器对象;然后调用处理器对象的Create方法并传入3个参数,其中第3个参数包含了该段内容的XML信息(在我们的例子中就是DbServer节点下的所有内容),然后返回Create的返回值。
    那我们这就是建立一个简单的段处理器类吧
在.net中使用强类型来读取配置信息using System;
在.net中使用强类型来读取配置信息
using System.Configuration;
在.net中使用强类型来读取配置信息
using System.Xml;
在.net中使用强类型来读取配置信息
在.net中使用强类型来读取配置信息
namespace SimpleConfig

    接着,把段处理器部分的

在.net中使用强类型来读取配置信息<section name="DbServer" type=""/>
    
    改为

在.net中使用强类型来读取配置信息<section name="DbServer" type="SimpleConfig.DbServerConfig, SimpleConfig"/>

    就可以使用下面的语句来读取配置文件中的内容了:

在.net中使用强类型来读取配置信息object o = ConfigurationManager.GetSection("DbServer");
在.net中使用强类型来读取配置信息DbServerConfig dbServerConfig 
= (DbServerConfig)o;
在.net中使用强类型来读取配置信息textBox1.Text 
= dbServerConfig.Address;
在.net中使用强类型来读取配置信息textBox2.Text 
= dbServerConfig.PortNumber.ToString();

    这是示例程序

    本文主要参考了《应用框架的设计与实现--.net平台》一书

相关文章: