ASP.NET CORE读取json格式配置文件

作者:袖梨 2026-09-17
这篇文章介绍了ASP.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+"rn"+option2+ "rn"+suboption1+ "rn"+name1+ "rn"+age1+ "rn"+name2+ "rn"+age2));if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}else{app.UseHsts();}app.UseHttpsRedirection();app.UseMvc();}

结果:

img_64cc999d779fb30.jpg

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 + "rnDataBase;" + _mongodbHostOptions.DataBase + "rnTable:" + _mongodbHostOptions.Table);}}}

运行结果:

img_64cc999d9e47e31.jpg

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 + "rnDataBase;" + _mongodbHostOptions.DataBase + "rnTable:" + _mongodbHostOptions.Table);await Response.WriteAsync("rn");await Response.WriteAsync("WebSiteName:" + _webSiteOptions.WebSiteName + "rnWebSiteUrl;" + _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.Configuration2、Microsoft.Extensions.configuration.json3、Microsoft.Extensions.Options4、Microsoft.Extensions.Options.ConfigurationExtensions5、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 + "rnInitialCatalog;" + dbOptions.InitialCatalog+ "rnUserId:"+dbOptions.UserId+ "rnPassword"+dbOptions.Password);await Response.WriteAsync("rn");await Response.WriteAsync("Connection:" + _mongodbHostOptions.Connection + "rnDataBase;" + _mongodbHostOptions.DataBase + "rnTable:" + _mongodbHostOptions.Table);await Response.WriteAsync("rn");await Response.WriteAsync("WebSiteName:" + _webSiteOptions.WebSiteName + "rnWebSiteUrl;" + _webSiteOptions.WebSiteUrl); }}}

运行结果:

img_64cc999db27d432.jpg

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

相关文章

精彩推荐