.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 ...
随机推荐
- node+koa2获取请求参数
1.get方式: http://localhost:3000/?user=000001&body=0002&age=26 const router = require('koa-rou ...
- 安装 jenkins
1. 将jenkins.war包放在 tomcat 的 webapps 目录下即可 2 重启 tomcat 3. 通过浏览器访问 IP:8080/jenkins
- Maven入门指南⑥:将项目发布到私服
1 . 修改私服中仓库的部署策略 Release版本的项目应该发布到Releases仓库中,对应的,Snapshot版本应该发布到Snapshots仓库中.Maven根据pom.xml文件中版本号&l ...
- 【转载】jdk1.8 LongAdder源码学习
本文转自https://blog.csdn.net/u011392897/article/details/60480108 LongAdder是jdk8新增的用于并发环境的计数器,目的是为了在高并发情 ...
- Using a Virtex Device to Drive 5V CMOS-Level Signals
Must tri-state outputs and use an external resistor to pull up to 5V To drive 5V CMOS-level inputs, ...
- NSArray与NSString、NSData,NSDictionary与NSString、NSData 相互转化
NSArray *array = @[ @1, @2, @3, @4, @5, @3 ]; // 1. NSArray与NSData相互转化 // NSArray to NSData NSError ...
- Session.Abandon和Session.Clear的实现和区别
我在网上找了一个比较贴切的描述: Session.Clear()就是把Session对象中的所有项目都删除了,Session对象里面啥都没有.但是Session对象还保留.Session.Abando ...
- yum离线安装rpm包
CentOS利用yum下载好rpm包,并离线安装 1.联网安装好rpm包,并将下载好的包备好 #yum install --downloadonly --downloaddir=/home/sam ...
- shell模板变量替换
我们经常使用一些模板语言来处理一些变量替换.比如jsp,php,velocity,freemarker,thymeleaf等.那对于shell来说,应该怎样替换变量呢.有一种很简单的办法可以做到. 先 ...
- AI通过了艺术创作图灵测试,你根本分不出来作者是不是人
各位geek朋友们,今年不用再看画了:近年来最大的艺术成就已经发生了. 这项艺术成就的诞生地,不是北京.新加坡.柏林郊区颜料四溅的画室中,不是威尼斯双年展上.请记住它出现的地点:美国新泽西州新布朗斯维 ...