NetCore以Json和Xml格式获取配置信息
本文将与大家分享:如何获取Json和Xml格式的Configuration信息,主要介绍配置扩展方法的使用,因为netcore的web应用在Startup中默认嵌入了appsettings.json文件的配置信息,所以我把测试点放在了netcore的控制台应用上;在控制台上使用配置文件也是很常见的事情,官网的例子主要讲解json格式,直接采取了xml格式,所以希望通过这次分享给大家很好的帮助;
获取Json配置信息,获取Xml配置信息,获取xml节点属性值。配置文件不能和应用程序放在一起吗?答案是肯定的。
netcore的netstandard扩展有自己的配置文件信息操作类,因为core的Web应用和console应用是统一的,所以下面解释了console应用中测试用例的演示,但是也可以用在Web应用中;
首先,我们需要参考控制台应用程序中的以下nuget包(我这里的测试是基于2.0的):
安装包微软。扩展。配置-2 . 0 . 0版安装-打包微软。扩展。配置。摘要-版本2.0.0获取Json配置信息
要获得json配置,我们需要参考上面的两个参考:
安装包微软。extensions . configuration . json-version 2 . 0 . 0这是JSON配置的基本参考。我们在控制台应用程序中创建appsettings.json文件,并定义以下json配置文件信息:
{ ' my config ' : { ' userName ' : ' sheniu Walking 3 ',' userpwd' :' 66666 ',' gaodape ' : { ' userName ' : ' sheniu Walking 1 ',' userPwd ' : ' 1111 Baidu API ' : { ' userName ' : ' sheniu Walking 2 ',2 ',' userPwd': '22222 '
var configBasePath=目录。GetCurrentDirectory();//configbase path=@ ' D : \ D \ t test ';SbLog。追加($ '配置文件目录:{ configbase path } \ n ');var builder=新配置构建器()。设置基本路径(配置基本路径)。AddJsonFile(' appsettings . JSON ');var配置=构建器。build();sb log . append($ my config : username节点的值:{ config . get section(' my config 3360 username ')。value } ');对于已经有核心开发经验的朋友来说,以上可以直接理解,但为了完美解释,还是需要简单说一下:
ConfigurationBuilder实例后,需要通过SetBasePath方法设置配置文件的基本路径,然后通过AddJsonFile扩展方法指定读取文件的名称;所有这些步骤都会返回IConfigurationBuilder接口,最后,需要Build方法来加载配置信息。这个构建器有点类似于start的意思。看一下效果图:
显然,配置文件中MyConfig:UserName节点的值是在这里获得的。这里,配置节getsection(字符串键);函数获取配置节点,配置节点的层次关系用“:”链接,所以这里有key=myconfig : username
为了程序的美观和多用途,这里,获取json文件包如下:
///summary////JSON配置文件读取/////summary//param name=' config filename '/param///param name=' base path '/param///返回/returns public static iconfigration root GetJsonConfig(string config filename=' appsettings . JSON ',string basePath=' '){ basePath=string。isnullorhitespace(base path)?目录。GetCurrentDirectory(): base path;var builder=新配置构建器()。SetBasePath(基本路径)。AddJsonFile(config filename);返回生成器。build();}顺便说一下,请注意AddJsonFile方法是由微软扩展的。扩展。配置。开篇引用的JSONIConfiguration不仅使用GetSection函数,还可以按照这种[字符串键]模式获取节点。以下分别是获取高德地图和百度地图配置节点信息的代码和渲染图:
var config JSON=GetJsonConfig();SbLog。追加($'json配置-myconfig节点的值:\ n ');SbLog。追加($ '高德-用户名:{ config JSON . getsection(' myconfig 3360 gaodaepi 3360 username ')。值} \ n ');SbLog。追加($ ' Baidu-username:{ config JSON[' my config : Baidu API 3360 username ']} \ n \ r \ n ');
注意:节点不区分大小写,多级节点由“:”获得。
获取Xml配置信息
Xml配置文件对我们来说也很常见。对于扩展的IConfigurationBuilder,我们也有一种类似json的扩展方法。首先,我们需要参考以下包:
安装包微软。extensions . configuration . xml-Version 2 . 0 . 0,然后获取与json几乎相同代码的XML配置文件:
///summary////XML配置文件读取/////summary//param name=' config filename '/param///param name=' base path '/param///返回/returns public static IConfigurationRoot GetXmlConfig(字符串config filename=' appsettings . XML ',字符串basePath=''){ basePath=string。isnullorhitespace(base path)?目录。GetCurrentDirectory(): base path;var builder=新配置构建器()。//SetBasePath(基本路径)。AddXmlFile(b={ b .路径=配置文件名;b . file provider=new physicalfilepider(base path);});返回生成器。build();}区别在于扩展了IConfigurationBuilder的AddXmlFile方法。在此示例中,公共静态icon configuration builder addxmlfile(此icon configuration builder,action xmlconfiguritionsource configuration source)用于传递配置文件名和基本路径以实现多样化。
下面是创建和初始化appsettings.xml配置文件的信息:
MyConfig GaoDeApi用户名des='高德的帐户' sheniu Walking 1/usernameuserpwd 11111/Userpwd/gaodepi百度Api UserName des='百度的帐户' sheniu Walking 2/usernameuserpwd 22222/Userpwd/百度API/myconfig我们来看一些调用获取配置节点的代码:
var config XML=GetXmlConfig();SbLog。追加($'xml配置-myconfig节点的值:\ n ');SbLog。追加($ '高德-用户名:{ config XML . getsection(' gaodaepi : username ')。值} \ n ');SbLog。追加($ ' Baidu-username:{ config XML[' Baidu API : username ']} \ n \ r \ n ');可以看出,xml和json以相同的方式读取配置节点。“:”表示层次关系,但要特别注意的是,xml不需要最外层和节点,比如这里的GaoDeApi:UserName。如果采用json,这里的关键应该是这样的:my config : gaodape 3360 username,这里是两者的另一个区别;如图所示:
Json和xml配置信息可以无一例外地获取;
获取xml节点属性值
通常,xml配置文件节点也有属性,比如上面的xml节点:UserName des='高德的账号' sheniu Walking 1/UserName,而这个des='是一个属性。我们如何获得这个价值?其实也和‘:’有关。下面的代码获取属性节点des的值:
SbLog。追加($ '高德-用户名-des:{ configxml . getsection(' gaodaepi : username 3360 des ')。值} \ n ');SbLog。追加($ ' Baidu-username-des:{ config XML[' Baidu API : username 3360 des ']} \ n \ r \ n ');
xml属性节点名不能是name,否则无法成功读取;如果这里的des改成名字,信息就无法正常获取,所以切记;
配置文件不能和应用程序放在一起吗?答案是肯定的。
有朋友会问一个问题:配置文件不能和应用放在一起吗?答案是肯定的,我们只需要替换目录。GetCurrentDirectory()(获取当前应用程序所在的磁盘目录)与配置文件所在的基本目录,如:config base path=@ ' d : \ d \ t test ';
下面是这个例子的全部测试用例代码:
使用微软。扩展。配置;使用微软。扩展。配置。Json使用微软。扩展名。文件提供商使用系统;使用系统。诊断;使用系统IO;使用系统。文字;命名空间我的服务{类程序{静态void Main(字符串[]参数){编码} .注册提供商(CodePageSenCodingProvider .实例);控制台。输出编码=编码GetEncoding(' GB2312 ');var sbLog=new StringBuilder(字符串。空的);var configBasePath=目录GetCurrentDirectory();//configbase路径=@ ' D : \ D \ t testsbLog .追加($ '配置文件所在目录:{ configbase路径} \ n ';var生成器=新配置构建器()。设置基本路径(配置基本路径)。AddJsonFile(' appsettings。JSON’);定义变量配置=构建器build();sbLog .追加($ ' MyConfig:UserName用户名节点的值:{config .GetSection(“我的配置:用户名”).值} \ n \ r \ n’);var config JSON=GetJsonConfig();sbLog .追加($'json配置-我的朋友节点的值:\ n ');sbLog .追加($ '高德-用户名:{configJson .GetSection('我的配置: gaodaepi :用户名').值} \ n ');sbLog .追加($ '百度-用户名:{ config JSON[' my config : Baidu API : userName ']} \ n \ r \ n ');var config XML=GetXmlConfig();sbLog .追加($'xml配置-我的朋友节点的值:\ n ');sbLog .追加($ '高德-用户名:{configXml .GetSection(' gaodepi : username ').值} \ n ');sbLog .追加($ '百度-userName:{ config XML[' Baidu API : userName ']} \ n \ r \ n ');sbLog .追加($ '高德-UserName-des:{configXml .GetSection(' gaodepi :用户名: des ').值} \ n ');sbLog .追加($ '百度-userName-des:{ config XML[' Baidu API : userName : des ']} \ n \ r \ n ');控制台。写线(SbLog);控制台ReadLine();} ///summary ///json配置文件读取////summary////param name=' config filename '/param///param name=' BasePath '/param///返回/返回公共静态iconfigration根GetJsonConfig(字符串配置文件名=' appsettings。JSON ',字符串basePATH=' '){ basePATH=字符串.isnullorhitespace(基本路径)?目录GetCurrentDirectory():基本路径;var生成器=新配置构建器()。SetBasePath(基本路径)。AddJsonFile(配置文件名);返回生成器build();} ///summary ///xml配置文件读取////summary////param name=' config filename '/param///param name='基本路径'/param///返回/返回公共静态IConfigurationRoot GetXmlConfig(字符串config filename=' appsettings。' XML ',字符串basePath='') { basePath=字符串.isnullorhitespace(基本路径)?目录GetCurrentDirectory():基本路径;var生成器=新配置构建器()。//SetBasePath(基本路径)。AddXmlFile(b={ b。路径=配置文件名;b .文件提供程序=new physicalfilepider(基本路径);});返回生成器build();} }}总结
以上所述是小编给大家介绍的NetCore .获取Json和可扩展标记语言格式的配置信息,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
版权声明:NetCore以Json和Xml格式获取配置信息是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。