.net core读取json格式的配置文件
在.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::Name"]} ";
string age1 = $"Age= {this.Configuration["student::Age"]}";
string name2 = $"Name={this.Configuration["student::Name"]}";
string age2 = $"Age= {this.Configuration["student::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": ,
"subsection": {
"suboption1": "subvalue1_from_json"
},
"student": [
{
"Name": "Gandalf",
"Age": ""
},
{
"Name": "Harry",
"Age": ""
}
],
"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": ""
}
}
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格式的配置文件的更多相关文章
- Android读取JSON格式数据
Android读取JSON格式数据 1. 何为JSON? JSON,全称为JavaScript Object Notation,意为JavaScript对象表示法. JSON 是轻量级的文本数据交换格 ...
- pyhton读取json格式的气象数据
原文关于读取pm25.in气象数据的pyhton方法,以及浅析python json的应用 以pm25.in网站数据为例. 1.方法介绍 首先感谢pm25.in提供了优质的空气污染数据,为他们的辛勤劳 ...
- C读取json格式字符串
python调用C库时参数太多,约定传json格式字符串,C解析 #include<stdio.h> #include<string.h> #include<stdlib ...
- .net core读取json配置文件
一.新建.net core控制台程序 二.通过Nuget引入 Microsoft.Extensions.Configuration和microsoft.extensions.configuration ...
- Java 读取 Json格式的 内容
一.Json 报文格式如下: 二.获取 Json 报文中字段的内容 import java.io.IOException; import com.fasterxml.jackson.core.Json ...
- python读取uti-8格式ini配置文件出现UnicodeDecodeError: 'gbk' codec can't decode byte 0xba in position 367: illegal multibyte sequence错误解决方法
出现这种错误只需要在read下添加encoding='utf-8' 如: from configparser import ConfigParser cf = ConfigParser() cf.re ...
- 如何读取 Json 格式文件
Json 源文件代码: [ { "Id": "0", "Name": "书籍", "Detail": ...
- perl 读取json 格式的文件
使用JSON 模块中的 decode_json 函数,将json文件中的数据解码为perl 中的对象,然后进行处理 代码如下: #!/usr/bin/env perl use JSON; use En ...
- 使用.net core读取Json文件配置
1.使用vs2017创建一个应用台程序 2.使用程序包管理器控制台执行命令 Install-Package Microsoft.AspNetCore -Version 2.0.1 3.创建一个json ...
随机推荐
- EntityFramework Core
1,安装EF Core 在.csproj中添加一下配置,用于使用dotnet ef 命令 <ItemGroup> <DotNetCliToolReference Include=&q ...
- iOS 11开发教程(二十)iOS11应用视图美化按钮之设置按钮的状态
iOS 11开发教程(二十)iOS11应用视图美化按钮之设置按钮的状态 在示例2-2中,设置按钮的标题和颜色时,需要对按钮的状态进行设置,表示按钮在某一状态下的标题和标题颜色是什么样子.例如,UICo ...
- [ 原创 ] Centos7.6安装Mysql5.7
https://blog.csdn.net/shj_php/article/details/86712408 CentOS7下安装MySQL5.7安装与配置(YUM) http://blog.csdn ...
- Python获取系统音量
1,如果是windows下 试试这个python 模块winsoundhttp://docs.python.org/2/library/winsound.html这个也可以winmm调整windows ...
- php urlencode函数 (中文字符转换为十六进制)
urlencode()函数原理就是首先把中文字符转换为十六进制,然后在每个字符前面加一个标识符%. urldecode()函数与urlencode()函数原理相反,用于解码已编码的 URL 字符串,其 ...
- [CF241E]Flights
[CF241E]Flights 题目大意: 给一张\(n(n\le1000)\)个点\(m(m\le5000)\)条边的DAG,确定每条边的边权\(w_i(w_i\in\{1,2\})\),使得所有从 ...
- pycharm引入numpy报错:ImportError: Importing the multiarray numpy extension module failed. Most likely you are trying to import a failed build of numpy.
软件为pycharm,安装了anaconda. 我一开始的报错为,PyCharm中无法调用numpy,报错ModuleNotFoundError: No module named 'numpy',这个 ...
- BZOJ5384 有趣的字符串题 回文树
神奇的结论: 一个字符串的所有回文后缀的长度,可以形成$k$个等差数列,$k$是$log$级的 考虑前$R$个字符组成的字符串,对于一个等差数列,假设组成这个等差数列的回文串,最短的叫$a$,最长的叫 ...
- Oracle的decode、sign、trunc函数
原文http://knowyouknowme.iteye.com/blog/574974 一.decode 在Oracle/PLSQL中, decode 具有和 IF-THEN-ELSE 一样的功能 ...
- svnkit https 忽略证书认证
直接上代码 解决jdk版本问题:Security.setProperty("jdk.tls.disabledAlgorithms", ""); import j ...