前言:在與傳統的asp.net MVC項目相比,.net core項目在項目目錄的文件結構上和功能上與前者都有很大的區別。例如:在.net core中使用Startup.cs取代Global.asax文件用于加載應用程序的配置和各種啟動項。appsettings.json取代web.config文件用于存儲應用程序所需的配置參數等等。。。
OK!步入正題,下面來說一下如何讀取Json配置文件中的參數。
第一種:使用IConfiguration接口
我們先在appsettings.json中配置好數據庫連接字符串,然后讀取它
1
2
3
4
5
6
7
8
9
10
11
12
13
|
{ "Connection" : { "dbContent" : "Data Source=.;Initial Catalog=test;User ID=sa;Password=123456" }, "Logging" : { "LogLevel" : { "Default" : "Information" , "Microsoft" : "Warning" , "Microsoft.Hosting.Lifetime" : "Information" } }, "AllowedHosts" : "*" } |
在控制器中注入IConfiguration接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
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中寫好配置參數,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
{ "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
1
|
string commodity_test1 = _configuration[ "Content:0:Trade_name:test1" ]; |
第二種:使用IOptions<T>來讀取json配置文件
先把NuGet包導進項目:Microsoft.Extensions.Options.ConfigurationExtensions
首先在appsettings.json中添加節點如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
{ "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號" } ] } } //============================== } |
然和再建立一個與這個節點"相同"的類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
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中添加如下代碼
1
2
3
4
|
#region 服務注冊,在控制器中通過注入的形式使用 services.AddOptions(); services.Configure<Information>(Configuration.GetSection( "Information" )); #endregion |
控制器中使用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
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文件
1
2
3
4
5
6
|
再建一個類,封裝一個方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
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(); } } } |
在控制器中調用:
1
2
3
4
5
6
7
8
9
10
11
|
[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地址:https://github.com/Davenever/Read_Json.git
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://www.cnblogs.com/zhangnever/p/11909842.html