이 글에서는 Json에서 구성 정보를 얻는 방법과 알아보겠습니다
이 글에서 공유할 내용은 Json에서 구성 정보를 얻는 방법과 정보이므로 테스트 포인트를 콘솔 애플리케이션에 두었습니다. netcore; 콘솔에서 구성 파일을 사용하는 것도 일반적인 일이며 공식 웹 사이트 예제에서는 주로 json 형식을 설명하고 xml 형식을 직접 다루었으므로 이 기사를 공유하면 좋은 도움이 될 수 있기를 바랍니다.
Json 구성 정보 가져오기
Xml 구성 정보 가져오기
xml 노드 속성 값 가져오기
구성 파일을 애플리케이션에서 분리할 수 있나요? 대답은 yes입니다
netcore의 netstandard 확장에는 구성 파일 정보 작업 클래스가 제공됩니다. core의 웹 애플리케이션과 콘솔 애플리케이션이 통합되어 있기 때문에 다음 테스트 사례를 콘솔 애플리케이션에서 시연하지만 웹에서도 사용할 수 있습니다.
먼저 콘솔 애플리케이션에서 다음 nuget 패키지를 참조해야 합니다(여기서 테스트는 2.0을 기반으로 함).
Install-Package Microsoft.Extensions.Configuration -Version 2.0.0 Install-Package Microsoft.Extensions.Configuration.Abstractions -Version 2.0.0
Json 구성 정보 가져오기
json 구성을 가져오려면 Except 위의 두 참조 외에도 다음을 인용해야 합니다.
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}");
이미 핵심 개발 경험이 있는 친구라면 위의 내용을 바로 이해할 수 있지만 완전한 설명을 위해 여전히 간략하게 설명해야 합니다.
ConfigurationBuilder 인스턴스 후에 SetBasePath 메서드를 통해 구성 파일의 기본 경로를 설정한 다음 AddJsonFile 확장 메서드를 통해 읽을 파일 이름을 지정해야 합니다. 이 단계에서는 IConfigurationBuilder를 반환합니다. 마지막으로 구성 정보를 로드하려면 Build 메소드가 필요합니다. 이 빌더는 렌더링을 살펴보겠습니다.
분명히 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 함수를 사용할 뿐만 아니라 이 [문자열 키] 방법에 따라 노드를 얻을 수도 있습니다. 다음은 노드 정보 구성을 위한 코드 및 렌더링을 각각 얻는 것입니다.
참고: 노드는 대소문자를 구분하지 않으며, 다중 레벨 노드는 ':'을 사용하여
xml 구성 파일을 얻습니다. 이는 확장된 IConfigurationBuilder에서도 일반적입니다. , json과 유사한 확장 방법도 있습니다. 먼저 다음 패키지를 참조해야 합니다.
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");
그런 다음 json과 거의 동일한 코드를 사용하여 xml 구성 파일을 가져옵니다.
Install-Package Microsoft.Extensions.Configuration.Xml -Version 2.0.0
새 앱 설정을 만들고 초기화해 보겠습니다. .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(); }
구성 노드를 가져오기 위해 호출하는 코드 부분을 살펴보겠습니다.
<MyConfig> <GaoDeApi> <UserName des="高德的账号">神牛步行1</UserName> <userPwd>111111</userPwd> </GaoDeApi> <BaiDuApi> <userName des="百度的账号">神牛步行2</userName> <userPwd>222222</userPwd> </BaiDuApi> </MyConfig>
또한 json 및 xml 구성 정보를 얻을 수 있습니다.
xml 노드 속성을 가져옵니다. 가치
通常xml配置文件节点还有属性(attribute),如上面的xml节点: 7a286013418a1834dc7c3eeef39dd0f2神牛步行100d001d0ea2d832461d3ff9217bf550e ,这个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 형식의 구성 정보를 얻는 방법에 대한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!