在.Net Framework中,配置文件一般采用的是XML格式的,.NET Framework提供了专门的ConfigurationManager来读取配置文件的内容,.net core中推荐使用json格式的配置文件,那么在.net core中该如何读取json文件呢?
一、在Startup类中读取json配置文件
1、使用Configuration直接读取
看下面的代码:
- public IConfiguration Configuration { get; }
Configuration属性就是.net core中提供的用来读取json文件。例如:
- public void Configure(IApplicationBuilder app, IHostingEnvironment env)
- {
-
- string option1 = $"option1 = {this.Configuration["Option1"]}";
- string option2 = $"option2 = {this.Configuration["Option2"]}";
- string suboption1 = $"suboption1 = {this.Configuration["subsection:suboption1"]}";
- // 读取数组
- string name1 = $"Name={this.Configuration["student:0:Name"]} ";
- string age1 = $"Age= {this.Configuration["student:0:Age"]}";
- string name2 = $"Name={this.Configuration["student:1:Name"]}";
- string age2 = $"Age= {this.Configuration["student:1:Age"]}";
- // 输出
- app.Run(c => c.Response.WriteAsync(option1+"\r\n"+option2+ "\r\n"+suboption1+ "\r\n"+name1+ "\r\n"+age1+ "\r\n"+name2+ "\r\n"+age2));
- if (env.IsDevelopment())
- {
- app.UseDeveloperExceptionPage();
- }
- else
- {
- app.UseHsts();
- }
-
- app.UseHttpsRedirection();
- app.UseMvc();
- }
结果:

2、使用IOptions接口
1、定义实体类
- public class MongodbHostOptions
- {
- /// <summary>
- /// 连接字符串
- /// </summary>
- public string Connection { get; set; }
- /// <summary>
- /// 库
- /// </summary>
- public string DataBase { get; set; }
-
- public string Table { get; set; }
- }
2、修改json文件
在appsettings.json文件中添加MongodbHost节点:
- {
- "Logging": {
- "LogLevel": {
- "Default": "Warning"
- }
- },
- "option1": "value1_from_json",
- "option2": 2,
- "subsection": {
- "suboption1": "subvalue1_from_json"
- },
- "student": [
- {
- "Name": "Gandalf",
- "Age": "1000"
- },
- {
- "Name": "Harry",
- "Age": "17"
- }
- ],
- "AllowedHosts": "*",
- //MongoDb
- "MongodbHost": {
- "Connection": "mongodb://127.0.0.1:27017",
- "DataBase": "TemplateDb",
- "Table": "CDATemplateInfo"
- }
- }
注意:
MongodbHost里面的属性名必须要和定义的实体类里面的属性名称一致。
3、在StartUp类里面配置
添加OptionConfigure方法绑定
- private void OptionConfigure(IServiceCollection services)
- {
- //MongodbHost信息
- services.Configure<MongodbHostOptions>(Configuration.GetSection("MongodbHost"));
- }
在ConfigureServices方法中调用上面定义的方法:
- public void ConfigureServices(IServiceCollection services)
- {
- // 调用OptionConfigure方法
- OptionConfigure(services);
- services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
- }
在控制器中使用,代码如下:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- using Microsoft.AspNetCore.Http;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.Extensions.Options;
-
- namespace ReadJsonDemo.Controllers
- {
- [Route("api/[controller]")]
- [ApiController]
- public class MongodbController : ControllerBase
- {
- private readonly MongodbHostOptions _mongodbHostOptions;
-
- /// <summary>
- /// 通过构造函数注入
- /// </summary>
- /// <param name="mongodbHostOptions"></param>
- public MongodbController(IOptions<MongodbHostOptions> mongodbHostOptions)
- {
- _mongodbHostOptions = mongodbHostOptions.Value;
- }
-
- [HttpGet]
- public async Task Get()
- {
- await Response.WriteAsync("Connection:" + _mongodbHostOptions.Connection + "\r\nDataBase;" + _mongodbHostOptions.DataBase + "\r\nTable:" + _mongodbHostOptions.Table);
- }
- }
- }
运行结果:

3、读取自定义json文件
在上面的例子中都是读取的系统自带的appsettings.json文件,那么该如何读取我们自己定义的json文件呢?这里可以使用ConfigurationBuilder类。
实例化类
- var builder = new ConfigurationBuilder();
添加方式1
- builder.AddJsonFile("path", false, true);
其中path表示json文件的路径,包括路径和文件名。
添加方式2
- builder.Add(new JsonConfigurationSource {Path= "custom.json",Optional=false,ReloadOnChange=true }).Build()
具体代码如下:
- private void CustomOptionConfigure(IServiceCollection services)
- {
- IConfiguration _configuration;
- var builder = new ConfigurationBuilder();
- // 方式1
- //_configuration = builder.AddJsonFile("custom.json", false, true).Build();
- // 方式2
- _configuration = builder.Add(new JsonConfigurationSource {Path= "custom.json",Optional=false,ReloadOnChange=true }).Build();
- services.Configure<WebSiteOptions>(_configuration.GetSection("WebSiteConfig"));
- }
ConfigureServices方法如下:
- public void ConfigureServices(IServiceCollection services)
- {
- // 调用OptionConfigure方法
- OptionConfigure(services);
- CustomOptionConfigure(services);
- services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
- }
控制器代码如下:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- using Microsoft.AspNetCore.Http;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.Extensions.Options;
-
- namespace ReadJsonDemo.Controllers
- {
- [Route("api/[controller]")]
- [ApiController]
- public class MongodbController : ControllerBase
- {
- private readonly MongodbHostOptions _mongodbHostOptions;
-
- private readonly WebSiteOptions _webSiteOptions;
-
- /// <summary>
- /// 通过构造函数注入
- /// </summary>
- /// <param name="mongodbHostOptions"></param>
- public MongodbController(IOptions<MongodbHostOptions> mongodbHostOptions,IOptions<WebSiteOptions> webSiteOptions)
- {
- _mongodbHostOptions = mongodbHostOptions.Value;
- _webSiteOptions = webSiteOptions.Value;
- }
-
- [HttpGet]
- public async Task Get()
- {
- await Response.WriteAsync("Connection:" + _mongodbHostOptions.Connection + "\r\nDataBase;" + _mongodbHostOptions.DataBase + "\r\nTable:" + _mongodbHostOptions.Table);
- await Response.WriteAsync("\r\n");
- await Response.WriteAsync("WebSiteName:" + _webSiteOptions.WebSiteName + "\r\nWebSiteUrl;" + _webSiteOptions.WebSiteUrl);
- }
- }
- }
二、在类库中读取json文件
在上面的示例中都是直接在应用程序中读取的,那么如何在单独的类库中读取json文件呢?看下面的示例代码:
- using Microsoft.Extensions.Configuration;
- using Microsoft.Extensions.DependencyInjection;
- using Microsoft.Extensions.Options;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Text;
-
- namespace Common
- {
- public class JsonConfigHelper
- {
- public static T GetAppSettings<T>(string fileName, string key) where T : class, new()
- {
- // 获取bin目录路径
- var directory = AppContext.BaseDirectory;
- directory = directory.Replace("\\", "/");
-
- var filePath = $"{directory}/{fileName}";
- if (!File.Exists(filePath))
- {
- var length = directory.IndexOf("/bin");
- filePath = $"{directory.Substring(0, length)}/{fileName}";
- }
-
- IConfiguration configuration;
- var builder = new ConfigurationBuilder();
-
- builder.AddJsonFile(filePath, false, true);
- configuration = builder.Build();
-
- var appconfig = new ServiceCollection()
- .AddOptions()
- .Configure<T>(configuration.GetSection(key))
- .BuildServiceProvider()
- .GetService<IOptions<T>>()
- .Value;
-
- return appconfig;
- }
- }
- }
注意:这里要添加如下几个程序集,并且要注意添加的程序集的版本要和.net core web项目里面的程序集版本一致,否则会报版本冲突的错误
- 1、Microsoft.Extensions.Configuration
- 2、Microsoft.Extensions.configuration.json
- 3、Microsoft.Extensions.Options
- 4、Microsoft.Extensions.Options.ConfigurationExtensions
- 5、Microsoft.Extensions.Options
json文件如下:
- {
- "WebSiteConfig": {
- "WebSiteName": "CustomWebSite",
- "WebSiteUrl": "https:localhost:12345"
- },
- "DbConfig": {
- "DataSource": "127.0.0.1",
- "InitialCatalog": "MyDb",
- "UserId": "sa",
- "Password": "123456"
- }
- }
DbHostOptions实体类定义如下:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
-
- namespace ReadJsonDemo
- {
- public class DbHostOptions
- {
- public string DataSource { get; set; }
-
- public string InitialCatalog { get; set; }
-
- public string UserId { get; set; }
-
- public string Password { get; set; }
- }
- }
注意:这里的DbHostOptions实体类应该建在单独的类库中,这里为了演示方便直接建在应用程序中了。
在控制器中调用:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- using Common;
- using Microsoft.AspNetCore.Http;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.Extensions.Options;
-
- namespace ReadJsonDemo.Controllers
- {
- [Route("api/[controller]")]
- [ApiController]
- public class MongodbController : ControllerBase
- {
- private readonly MongodbHostOptions _mongodbHostOptions;
-
- private readonly WebSiteOptions _webSiteOptions;
-
- /// <summary>
- /// 通过构造函数注入
- /// </summary>
- /// <param name="mongodbHostOptions"></param>
- public MongodbController(IOptions<MongodbHostOptions> mongodbHostOptions,IOptions<WebSiteOptions> webSiteOptions)
- {
- _mongodbHostOptions = mongodbHostOptions.Value;
- _webSiteOptions = webSiteOptions.Value;
- }
-
- [HttpGet]
- public async Task Get()
- {
- DbHostOptions dbOptions = JsonConfigHelper.GetAppSettings<DbHostOptions>("custom.json", "DbConfig");
- await Response.WriteAsync("DataSource:" + dbOptions.DataSource + "\r\nInitialCatalog;" + dbOptions.InitialCatalog+ "\r\nUserId:"+dbOptions.UserId+ "\r\nPassword"+dbOptions.Password);
- await Response.WriteAsync("\r\n");
- await Response.WriteAsync("Connection:" + _mongodbHostOptions.Connection + "\r\nDataBase;" + _mongodbHostOptions.DataBase + "\r\nTable:" + _mongodbHostOptions.Table);
- await Response.WriteAsync("\r\n");
- await Response.WriteAsync("WebSiteName:" + _webSiteOptions.WebSiteName + "\r\nWebSiteUrl;" + _webSiteOptions.WebSiteUrl);
- }
- }
- }
运行结果:

到此这篇关于ASP.NET CORE读取json格式配置文件的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持w3xue。