>백엔드 개발 >C#.Net 튜토리얼 >.NetCore가 Json 및 Xml 형식의 구성 정보를 얻는 방법에 대한 설명

.NetCore가 Json 및 Xml 형식의 구성 정보를 얻는 방법에 대한 설명

巴扎黑
巴扎黑원래의
2017-09-20 09:36:003749검색

이 글에서는 Json에서 구성 정보를 얻는 방법과 알아보겠습니다

이 글에서 공유할 내용은 Json에서 구성 정보를 얻는 방법과 정보이므로 테스트 포인트를 콘솔 애플리케이션에 두었습니다. netcore; 콘솔에서 구성 파일을 사용하는 것도 일반적인 일이며 공식 웹 사이트 예제에서는 주로 json 형식을 설명하고 xml 형식을 직접 다루었으므로 이 기사를 공유하면 좋은 도움이 될 수 있기를 바랍니다.

  1. Json 구성 정보 가져오기

  2. Xml 구성 정보 가져오기

  3. 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 구성 정보 가져오기

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

The 차이점은 IConfigurationBuilder의 AddXmlFile 메서드를 확장하는 것입니다. 이 예에서는 구성 파일 이름과 기본 경로를 전달하기 위해 공용 정적 IConfigurationBuilder AddXmlFile(이 IConfigurationBuilder 빌더, Actionae92d117680019c8adb696c6f7aa0015configureSource)을 사용합니다.

새 앱 설정을 만들고 초기화해 보겠습니다. .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>

xml과 json이 동일한 구성 노드를 읽는 것을 볼 수 있습니다. ":"는 계층적 관계를 나타냅니다. 그러나 xml에는 GaoDeApi:UserName과 같이 가장 바깥쪽 레이어와 노드가 필요하지 않다는 사실에 특별한 주의가 필요합니다. MyConfig:GaoDeApi:UserName 두 가지의 또 다른 차이점은 다음과 같습니다. ;그림에 표시된 대로:


또한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.