前言:在与传统的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" : "小熊饼干" ,
"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