在.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格式的配置文件的更多相关文章

  1. Android读取JSON格式数据

    Android读取JSON格式数据 1. 何为JSON? JSON,全称为JavaScript Object Notation,意为JavaScript对象表示法. JSON 是轻量级的文本数据交换格 ...

  2. pyhton读取json格式的气象数据

    原文关于读取pm25.in气象数据的pyhton方法,以及浅析python json的应用 以pm25.in网站数据为例. 1.方法介绍 首先感谢pm25.in提供了优质的空气污染数据,为他们的辛勤劳 ...

  3. C读取json格式字符串

    python调用C库时参数太多,约定传json格式字符串,C解析 #include<stdio.h> #include<string.h> #include<stdlib ...

  4. .net core读取json配置文件

    一.新建.net core控制台程序 二.通过Nuget引入 Microsoft.Extensions.Configuration和microsoft.extensions.configuration ...

  5. Java 读取 Json格式的 内容

    一.Json 报文格式如下: 二.获取 Json 报文中字段的内容 import java.io.IOException; import com.fasterxml.jackson.core.Json ...

  6. 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 ...

  7. 如何读取 Json 格式文件

    Json 源文件代码: [ { "Id": "0", "Name": "书籍", "Detail": ...

  8. perl 读取json 格式的文件

    使用JSON 模块中的 decode_json 函数,将json文件中的数据解码为perl 中的对象,然后进行处理 代码如下: #!/usr/bin/env perl use JSON; use En ...

  9. 使用.net core读取Json文件配置

    1.使用vs2017创建一个应用台程序 2.使用程序包管理器控制台执行命令 Install-Package Microsoft.AspNetCore -Version 2.0.1 3.创建一个json ...

随机推荐

  1. JavaScript访问对象属性

    在JavaScript中,可以使用“ . ”和“ [ ] ”访问对象的属性. 1.点表示法 使用“ . ”运算符来存取一个对象的属性时,属性名是用标识符表示的.而在JavaScript程序中,标识符必 ...

  2. Project_Lemon测评系统使用经验

    Project_Lemon使用经验 如果您还没有安装Project_Lemon,那么请移步https://www.cnblogs.com/CreeperLKF/p/9201859.html去查阅安装教 ...

  3. 弗洛伊德算法Floyed(求各顶点间最短路径):可打印最短路径

    #include <iostream> #include <string> #include <iomanip> using namespace std; #def ...

  4. 以为是tomcat出现using问题,怎么改都改不好终于找到原因

    我也是醉了被自己打败了,以上问题困扰我半天是时间,百度好久都没有解决.应该打开tomcat的bin下的starup.bat结果打开了tomcat-src中的了,怪不得死活出现不了startup

  5. 使用 SHOW STATUS 查看mysql 服务器状态信息

    在LAMP架构的网站开发过程中,有些时候我们需要了解MySQL的服务器状态信息,譬如当前MySQL启动后的运行时间,当前MySQL的客户端会话连接数,当前MySQL服务器执行的慢查询数,当前MySQL ...

  6. 喵哈哈村的魔法考试 Round #9 (Div.2) 题解

    A题 喵哈哈村的数据筛选游戏 题解:这道题签到题,拿个数组记录一下这个数是否出现过即可. #include<bits/stdc++.h> using namespace std; cons ...

  7. spring源码分析系列 (5) spring BeanFactoryPostProcessor拓展类PropertyPlaceholderConfigurer、PropertySourcesPlaceholderConfigurer解析

    更多文章点击--spring源码分析系列 主要分析内容: 1.拓展类简述: 拓展类使用demo和自定义替换符号 2.继承图UML解析和源码分析 (源码基于spring 5.1.3.RELEASE分析) ...

  8. print2flash文档在线预览应用(java,.net)

    一.背景 前段时间,LZ的boss突然给了出了这样一个需求:将原项目中的所有文章关联的附件TXT.PDF.office相关文件全部以flash的形式在网页上进行展示,便于预览.看似简单的需求,整个研发 ...

  9. Delphi自写组件:可设置颜色的按钮

    unit ColorButton; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, StdCtrls; ...

  10. 从零开始优雅的使用mongodb实例

    基本连接 一.创建express工程testmon express testmon 二.精简app.js var express = require("express"); var ...