分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

.net core读取json格式的配置文件

发布时间:2023-09-06 02:27责任编辑:郭大石关键词:jsjson配置

在.Net Framework中,配置文件一般采用的是XML格式的,.NET Framework提供了专门的ConfigurationManager来读取配置文件的内容,.net core中推荐使用json格式的配置文件,那么在.net core中该如何读取json文件呢?

1、在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); ??????????????????} ???}}

 运行结果:

.net core读取json格式的配置文件

原文地址:https://www.cnblogs.com/dotnet261010/p/10172961.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved