.Net Core讀取Json配置文件

前言:在與傳統的asp.net MVC項目相比,.net core項目在項目目錄的文件結構上和功能上與前者都有很大的區別。例如:在.net core中使用Startup.cs取代Global.asax文件用於加載應用程序的配置和各類啓動項。appsettings.json取代web.config文件用於存儲應用程序所需的配置參數等等。。。git

OK!步入正題,下面來講一下如何讀取Json配置文件中的參數。github

第一種:使用IConfiguration接口web

咱們先在appsettings.json中配置好數據庫鏈接字符串,而後讀取它數據庫

{ "Connection": { "dbContent": "Data Source=.;Initial Catalog=test;User ID=sa;Password=123456" }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*" }

 

 

 在控制器中注入IConfiguration接口json

using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; namespace Read.json.Controllers { [ApiController] [Route("[controller]")] public class ReadController : Controller { private IConfiguration _configuration; public ReadController(IConfiguration configuration) { _configuration = configuration; } [HttpPost] public async Task<string> ReadJson() {
//讀參
string conn = _configuration["Connection:dbContent"]; return ""; } } }

 

 固然也能夠讀取數組形式的json,同樣的先在appsettings.json中寫好配置參數,以下:api

{ "Connection": { "dbContent": "Data Source=.;Initial Catalog=test;User ID=sa;Password=123456" }, //------------------------
  "Content": [ { "Trade_name": { "test1": "小熊餅乾", "test2": "旺仔QQ糖", "test3": "娃哈哈牛奶" } } ], //------------------------

  "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*" }

好比咱們想讀取test1數組

string commodity_test1 = _configuration["Content:0:Trade_name:test1"];

 

 第二種:使用IOptions<T>來讀取json配置文件app

先把NuGet包導進項目:Microsoft.Extensions.Options.ConfigurationExtensionsasp.net

 

 

首先在appsettings.json中添加節點以下async

{ "Connection": { "dbContent": "Data Source=.;Initial Catalog=test;User ID=sa;Password=123456" }, //------------------------
  "Content": [ { "Trade_name": { "test1": "小熊餅乾", "test2": "旺仔QQ糖", "test3": "娃哈哈牛奶" } } ], //------------------------

  "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*", //==============================
  "Information": { "school": { "Introduce": { "Name": "實驗小學", "Class": "中班", "Number": "15人" }, "Region": { "Province": "湖北", "City": "武漢", "Area": "洪山區" }, "Detailed_address": [ { "Address": "佳園路207號" } ] } } //==============================
}

 

然和再創建一個與這個節點"相同"的類

using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace Read.json { public class Information { public School school { get; set; } } public class School { public Introduce Introduce { get; set; } public Region Region { get; set; } public List<Detailed_address> data { get; set; } } public class Introduce { public string Name { get; set; } public string Class { get; set; } public string Number { get; set; } } public class Region { public string Province { get; set; } public string City { get; set; } public string Area { get; set; } } public class Detailed_address { public string Address { get; set; } } }

 

在Startup中添加以下代碼

#region 服務註冊,在控制器中經過注入的形式使用 services.AddOptions(); services.Configure<Information>(Configuration.GetSection("Information")); #endregion

 

 控制器中使用:

using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Options; namespace Read.json.Controllers { [Route("api/[controller]/[action]")] [ApiController] public class ReadController : Controller { private IConfiguration _configuration; readonly Information _Information; readonly IOptions<Information> _options; public ReadController(IConfiguration configuration, Information Information, IOptions<Information> options) { _configuration = configuration; _Information = Information; _options = options; } [HttpGet] public async Task<IActionResult> ReadInformation() { string Address = _options.Value.school.Region.Province + "-" + _options.Value.school.Region.City + "-" + _options.Value.school.Region.Area + "-" + _options.Value.school.Detailed_address[0].Address + "-" + _options.Value.school.Introduce.Name + "-" + _options.Value.school.Introduce.Class + "-" + _options.Value.school.Introduce.Number; return Json(Address); } [HttpPost] public async Task<string> ReadJson() { string conn = _configuration["Connection:dbContent"]; string commodity = _configuration["Content:0:Trade_name:test1"]; return ""; } } }

 

 

 

 

第三種:這種應該比較常見,任意讀取自定義的json文件

首先創建一個json文件

{ "system_version": { "Edition": ".Net Core 3.0", "Project_Name": "Read.json" } }

 

 

 再建一個類,封裝一個方法

using Microsoft.Extensions.Configuration; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace Read.json { public class Json_File { public IConfigurationRoot Read_Json_File() { //這句代碼會讀取read_json.json中的內容
            return new ConfigurationBuilder().AddJsonFile("read_json.json") .Build(); } } }

 

 

 在控制器中調用:

 [HttpGet] public async Task<IActionResult> ReadSystemVersion() { var configuration = _json_File.Read_Json_File(); string system = "使用的是" + configuration["system_version:Edition"] + "的版本" + "," +
                            "項目名稱是" + configuration["system_version:Project_Name"]; return Json(new { data = system }); }

 

 

 

 

Demo地址:Func<Address,Project> func = (address) => git clone address;
var project = func("https://github.com/Davenever/Read_Json.git");

 

相關文章
相關標籤/搜索