本篇将和人人分享的是:怎样猎取Json和Xml花样的设置信息,重要引见的是Configuration扩大要领的运用,因为netcore的web运用在Startup中已默许嵌入appsettings.json文件的设置信息,故而我把测试点放在在了netcore的掌握台运用上;掌握台上运用设置文件也是经常使用的事变,而且官网实例重要解说的是json花样,对xml花样直接带过了,因而有了本篇的分享,愿望能给你好的协助;
猎取Json设置信息
猎取Xml设置信息
猎取xml节点属性值
设置文件可否不和运用放在一同呢? 答案是一定的
关于netcore的netstandard扩大来讲其自带了设置文件信息操纵类,因为core的Web运用和掌握台运用都是一致的,因而下面解说测试用例在掌握台运用演示的,然则也可用于Web运用;
起首,咋们须要在掌握台运用中援用以下nuget包(我这里测试基于2.0):
Install-Package Microsoft.Extensions.Configuration -Version 2.0.0 Install-Package Microsoft.Extensions.Configuration.Abstractions -Version 2.0.0
猎取Json设置信息
要猎取json设置我们除了上面两个援用外,还须要援用:
Install-Package Microsoft.Extensions.Configuration.Json -Version 2.0.0
这是json设置的基本援用,我们在掌握台运用中建立appsettings.json文件,并定义以下json设置文件信息:
{ "MyConfig": { "UserName": "神牛步行3", "userPwd": "666666", "GaoDeApi": { "UserName": "神牛步行1", "userPwd": "111111" }, "BaiDuApi":{ "userName": "神牛步行2", "userPwd": "222222" } } }
然后只须要以下代码,即可猎取到该文件信息:
var configBasePath = Directory.GetCurrentDirectory(); //configBasePath = @"D:\D\TTest"; sbLog.Append($"设置文件地点目次:{configBasePath}\n"); var builder = new ConfigurationBuilder(). SetBasePath(configBasePath). AddJsonFile("appsettings.json"); var config = builder.Build(); sbLog.Append($"MyConfig:UserName节点的值:{config.GetSection("MyConfig:UserName").Value}");
关于已有core开辟履历的朋侪而言,上面直接能看懂,不过为了完美的解说这里照样须要简朴说下的:
ConfigurationBuilder实例事后须要经由过程SetBasePath要领设置设置文件基本途径,再经由过程AddJsonFile扩大要领指定读取的文件称号;这些步骤实行返回的都是IConfigurationBuilder接口,末了还须要Build要领实行加载设置信息,这个builder有点类似于start的意义;来看看效果图:
很显然这里猎取到了设置文件中的MyConfig:UserName节点的值,这里经由过程 IConfigurationSection GetSection(string key); 函数猎取设置节点,设置节点层级关联经由过程“:”链接,因而这里就有了key=MyConfig:UserName;
为了顺序的雅观性和多运用性,这里吧猎取json文件的封装为以下要领:
/// <summary> /// json设置文件读取 /// </summary> /// <param name="configFileName"></param> /// <param name="basePath"></param> /// <returns></returns> public static IConfigurationRoot GetJsonConfig( string configFileName = "appsettings.json", string basePath = "") { basePath = string.IsNullOrWhiteSpace(basePath) ? Directory.GetCurrentDirectory() : basePath; var builder = new ConfigurationBuilder(). SetBasePath(basePath). AddJsonFile(configFileName); return builder.Build(); }
对了这里注重下AddJsonFile要领是经由过程开节援用的 Microsoft.Extensions.Configuration.Json 扩大的;因为IConfiguration不光用GetSection函数,她也能依据 this[string key] 体式格局猎取节点,下面是离别猎取高德舆图和百度舆图设置节点信息的代码和效果图:
var configJson = GetJsonConfig(); sbLog.Append($"json设置-MyConfg节点的值:\n"); sbLog.Append($"高德-UserName:{configJson.GetSection("MyConfig:GaoDeApi:UserName").Value}\n"); sbLog.Append($"百度-userName:{configJson["MyConfig:BaiDuApi:UserName"]}\n\r\n");
注重:节点不辨别大小写,多级节点运用‘:'猎取;
猎取Xml设置信息
xml设置文件也是我们罕见的,对已扩大的IConfigurationBuilder来讲,我们一样也有类似于json那样扩大的要领,起首须要援用以下包:
Install-Package Microsoft.Extensions.Configuration.Xml -Version 2.0.0
然后险些和json一样的代码猎取xml设置文件:
/// <summary> /// xml设置文件读取 /// </summary> /// <param name="configFileName"></param> /// <param name="basePath"></param> /// <returns></returns> public static IConfigurationRoot GetXmlConfig( string configFileName = "appsettings.xml", string basePath = "") { basePath = string.IsNullOrWhiteSpace(basePath) ? Directory.GetCurrentDirectory() : basePath; var builder = new ConfigurationBuilder(). //SetBasePath(basePath). AddXmlFile(b => { b.Path = configFileName; b.FileProvider = new PhysicalFileProvider(basePath); }); return builder.Build(); }
区分在于扩大IConfigurationBuilder的AddXmlFile要领,本次示例为了多样化运用了 public static IConfigurationBuilder AddXmlFile(this IConfigurationBuilder builder, Action<XmlConfigurationSource> configureSource) 来通报设置文件称号和基本途径;
下面来新建并初始化appsettings.xml设置文件信息:
<MyConfig> <GaoDeApi> <UserName des="高德的账号">神牛步行1</UserName> <userPwd>111111</userPwd> </GaoDeApi> <BaiDuApi> <userName des="百度的账号">神牛步行2</userName> <userPwd>222222</userPwd> </BaiDuApi> </MyConfig>
再来看看挪用猎取设置节点的部份代码:
var configXml = GetXmlConfig(); sbLog.Append($"xml设置-MyConfg节点的值:\n"); sbLog.Append($"高德-UserName:{configXml.GetSection("GaoDeApi:UserName").Value}\n"); sbLog.Append($"百度-userName:{configXml["BaiDuApi:UserName"]}\n\r\n");
可以看出xml和json读取设置节点的体式格局一样“:”示意层级关联,然则特别注重点在于xml不须要最外层跟节点,如这里的:GaoDeApi:UserName,假如根据json体式格局的话这里的key应该是如许:MyConfig:GaoDeApi:UserName,这里就是两种的别的一种区分;如图:
不出之外json和xml设置信息都能猎取到了;
猎取xml节点属性值
一般xml设置文件节点另有属性(attribute),如上面的xml节点: <UserName des="高德的账号">神牛步行1</UserName> ,这个des=""就是属性,我们要怎样才猎取这个值呢;这里实在一样照样经由过程':'来关联的,以下代码猎取属性节点des的值:
sbLog.Append($"高德-UserName-des:{configXml.GetSection("GaoDeApi:UserName:des").Value}\n"); sbLog.Append($"百度-userName-des:{configXml["BaiDuApi:UserName:des"]}\n\r\n");
xml属性节点称号不能是name,不然是没法读取胜利的;如这里的des改成name称号的话,没法一般猎取信息,服膺于心;
设置文件可否不和运用放在一同呢? 答案是一定的
有部份朋侪会提出一个题目:设置文件可否不和运用放在一同呢? 答案是一定的,我们只需把Directory.GetCurrentDirectory()(猎取当前运用地点磁盘目次)替换成设置文件地点的基本目次就好了,如我这里的: configBasePath = @"D:\D\TTest";
下面是本次实例的全部测试用例代码:
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration.Json; using Microsoft.Extensions.FileProviders; using System; using System.Diagnostics; using System.IO; using System.Text; namespace MyService { class Program { static void Main(string[] args) { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); Console.OutputEncoding = Encoding.GetEncoding("GB2312"); var sbLog = new StringBuilder(string.Empty); var configBasePath = Directory.GetCurrentDirectory(); //configBasePath = @"D:\D\TTest"; sbLog.Append($"设置文件地点目次:{configBasePath}\n"); var builder = new ConfigurationBuilder(). SetBasePath(configBasePath). AddJsonFile("appsettings.json"); var config = builder.Build(); sbLog.Append($"MyConfig:UserName节点的值:{config.GetSection("MyConfig:UserName").Value}\n\r\n"); var configJson = GetJsonConfig(); sbLog.Append($"json设置-MyConfg节点的值:\n"); sbLog.Append($"高德-UserName:{configJson.GetSection("MyConfig:GaoDeApi:UserName").Value}\n"); sbLog.Append($"百度-userName:{configJson["MyConfig:BaiDuApi:UserName"]}\n\r\n"); var configXml = GetXmlConfig(); sbLog.Append($"xml设置-MyConfg节点的值:\n"); sbLog.Append($"高德-UserName:{configXml.GetSection("GaoDeApi:UserName").Value}\n"); sbLog.Append($"百度-userName:{configXml["BaiDuApi:UserName"]}\n\r\n"); sbLog.Append($"高德-UserName-des:{configXml.GetSection("GaoDeApi:UserName:des").Value}\n"); sbLog.Append($"百度-userName-des:{configXml["BaiDuApi:UserName:des"]}\n\r\n"); Console.WriteLine(sbLog); Console.ReadLine(); } /// <summary> /// json设置文件读取 /// </summary> /// <param name="configFileName"></param> /// <param name="basePath"></param> /// <returns></returns> public static IConfigurationRoot GetJsonConfig( string configFileName = "appsettings.json", string basePath = "") { basePath = string.IsNullOrWhiteSpace(basePath) ? Directory.GetCurrentDirectory() : basePath; var builder = new ConfigurationBuilder(). SetBasePath(basePath). AddJsonFile(configFileName); return builder.Build(); } /// <summary> /// xml设置文件读取 /// </summary> /// <param name="configFileName"></param> /// <param name="basePath"></param> /// <returns></returns> public static IConfigurationRoot GetXmlConfig( string configFileName = "appsettings.xml", string basePath = "") { basePath = string.IsNullOrWhiteSpace(basePath) ? Directory.GetCurrentDirectory() : basePath; var builder = new ConfigurationBuilder(). //SetBasePath(basePath). AddXmlFile(b => { b.Path = configFileName; b.FileProvider = new PhysicalFileProvider(basePath); }); return builder.Build(); } } }
以上就是.NetCore怎样猎取Json和Xml花样的设置信息解说的细致内容,更多请关注ki4网别的相干文章!