在.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 voidConfigure(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 classMongodbHostOptions

{///

///连接字符串///

public string Connection { get; set; }///

///库///

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 voidOptionConfigure(IServiceCollection services)

{//MongodbHost信息

services.Configure(Configuration.GetSection("MongodbHost"));

}

在ConfigureServices方法中调用上面定义的方法:

public voidConfigureServices(IServiceCollection services)

{//调用OptionConfigure方法

OptionConfigure(services);

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

}

在控制器中使用,代码如下:

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Threading.Tasks;usingMicrosoft.AspNetCore.Http;usingMicrosoft.AspNetCore.Mvc;usingMicrosoft.Extensions.Options;namespaceReadJsonDemo.Controllers

{

[Route("api/[controller]")]

[ApiController]public classMongodbController : ControllerBase

{private readonlyMongodbHostOptions _mongodbHostOptions;///

///通过构造函数注入///

///

public MongodbController(IOptionsmongodbHostOptions)

{

_mongodbHostOptions=mongodbHostOptions.Value;

}

[HttpGet]public asyncTask 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 voidCustomOptionConfigure(IServiceCollection services)

{

IConfiguration _configuration;var builder = newConfigurationBuilder();//方式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(_configuration.GetSection("WebSiteConfig"));

}

ConfigureServices方法如下:

public voidConfigureServices(IServiceCollection services)

{//调用OptionConfigure方法

OptionConfigure(services);

CustomOptionConfigure(services);

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

}

控制器代码如下:

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Threading.Tasks;usingMicrosoft.AspNetCore.Http;usingMicrosoft.AspNetCore.Mvc;usingMicrosoft.Extensions.Options;namespaceReadJsonDemo.Controllers

{

[Route("api/[controller]")]

[ApiController]public classMongodbController : ControllerBase

{private readonlyMongodbHostOptions _mongodbHostOptions;private readonlyWebSiteOptions _webSiteOptions;///

///通过构造函数注入///

///

public MongodbController(IOptions mongodbHostOptions,IOptionswebSiteOptions)

{

_mongodbHostOptions=mongodbHostOptions.Value;

_webSiteOptions=webSiteOptions.Value;

}

[HttpGet]public asyncTask 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文件呢?看下面的示例代码:

usingMicrosoft.Extensions.Configuration;usingMicrosoft.Extensions.DependencyInjection;usingMicrosoft.Extensions.Options;usingSystem;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Text;namespaceCommon

{public classJsonConfigHelper

{public static T GetAppSettings(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 = newConfigurationBuilder();

builder.AddJsonFile(filePath,false, true);

configuration=builder.Build();var appconfig = newServiceCollection()

.AddOptions()

.Configure(configuration.GetSection(key))

.BuildServiceProvider()

.GetService>()

.Value;returnappconfig;

}

}

}

注意:这里要添加如下几个程序集,并且要注意添加的程序集的版本要和.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实体类定义如下:

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Threading.Tasks;namespaceReadJsonDemo

{public classDbHostOptions

{public string DataSource { get; set; }public string InitialCatalog { get; set; }public string UserId { get; set; }public string Password { get; set; }

}

}

注意:这里的DbHostOptions实体类应该建在单独的类库中,这里为了演示方便直接建在应用程序中了。

在控制器中调用:

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Threading.Tasks;usingCommon;usingMicrosoft.AspNetCore.Http;usingMicrosoft.AspNetCore.Mvc;usingMicrosoft.Extensions.Options;namespaceReadJsonDemo.Controllers

{

[Route("api/[controller]")]

[ApiController]public classMongodbController : ControllerBase

{private readonlyMongodbHostOptions _mongodbHostOptions;private readonlyWebSiteOptions _webSiteOptions;///

///通过构造函数注入///

///

public MongodbController(IOptions mongodbHostOptions,IOptionswebSiteOptions)

{

_mongodbHostOptions=mongodbHostOptions.Value;

_webSiteOptions=webSiteOptions.Value;

}

[HttpGet]public asyncTask Get()

{

DbHostOptions dbOptions= JsonConfigHelper.GetAppSettings("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);

}

}

}

运行结果:

netcore读取json文件_.net core读取json格式的配置文件相关推荐

  1. netcore读取json文件_.Net Core如何读取Json配置文件

    前言:在与传统的asp.net MVC项目相比,.net core项目在项目目录的文件结构上和功能上与前者都有很大的区别.例如:在.net core中使用Startup.cs取代Global.asax ...

  2. python 读取txt文件、转为json文件_使用python操作json文本文件

    使用python读写文本文件内容时,我们知道如果文本文件里的内容无规律,那么修改起来比较麻烦.但是如果文本文件存储是有规律的,比如JSON格式,在利用python内置的函数把JSON格式的数据转成py ...

  3. java poi 读取xlsx文件_使用POI读取xlsx文件(SXSSFWorkbook)

    我正在尝试使用POI来读取大型xlsx文件的第一次测试,但要使用小文件进行简单测试,我无法显示单元格的值.使用POI读取xlsx文件(SXSSFWorkbook) 有人可以告诉我什么是我的错误.所有的 ...

  4. 怎么用python读取大文件_使用Python读取大文件的方法

    背景准备试一试:f =开放(\u201C\/道路\/ \/文件\u201D,\u201Cr\u201D)打印()最后:如果f:()调用读()将读取所有文件的内容,如果文件有10 g,记忆会破灭,所以, ...

  5. java读取csv文件_使用扫描仪读取Java中的CSV文件

    java读取csv文件 We can use Java Scanner Class to read CSV File in java. 我们可以使用Java扫描程序类在Java中读取CSV文件. 读取 ...

  6. java jdom 读取xml文件_使用Jdom读取XML文件方法

    使用Jdom读取XML文件方法,学习Spring时,我们经常看到很多xml配置文件,Spring通过在配置文件中的配置,使用IOC(控制反转),从而实现代码的灵活性,本篇我就为大家介绍一种解析xml方 ...

  7. flex 解析json文件_使用 Python 处理 JSON 格式的数据 | Linux 中国

    如果你不希望从头开始创造一种数据格式来存放数据,JSON 是一个很好的选择.如果你对 Python 有所了解,就更加事半功倍了.下面就来介绍一下如何使用 Python 处理 JSON 数据.-- Se ...

  8. php导入json文件_[php]导入超大json文件

    前言 在之前的文章<做一个twitter的插件玩玩>中,我做了一个批量删除推文(转发推文)的工具,该工具能够删除前3200条推文,但因为总数太多(4.3万条),api接口不支持获取所有的推 ...

  9. java读取外部文件_(转)JAVA读取外部资源的方法

    在java代码中经常有读取外部资源的要求:如配置文件等等,通常会把配置文件放在classpath下或者在web项目中放在web-inf下. 1.从当前的工作目录中读取: try{ BufferedRe ...

最新文章

  1. Java 读写Properties配置文件
  2. “轻雀会议”跨越社交的“云沟通”
  3. xmemcached发布1.3.6
  4. Android中Gallery和ImageSwitcher的使用
  5. 计算机组成原理知识点概叙--计算机系统简介
  6. java transient关键字
  7. endnote初始化数据库支持_服务端编程——数据库(MySQL、sequelize) - 天生笑点低你奈我何...
  8. jquery ajax POST/GET 请求至 ASP.NET WebAPI
  9. Photoshop扣除特定颜色背景
  10. 批量添加DNS的A记录和PTR记录
  11. 【qxbt day1】 P2367 语文成绩
  12. 不要惊奇这种观点400电话
  13. 2016ICPC沈阳站总结
  14. dw选项卡代码_Dreamweaver中js实现竖向选项卡或滑动门代码!急!!!
  15. 用python做可视化驾驶舱大屏全代码
  16. domoticz折腾指南--通过esp_easy固件控制继电器开关
  17. 学计算机的怎样分析TCGA数据库,开启数据挖掘之门:TCGA数据库入门必看!
  18. 【不收藏一定后悔】超智能三子棋——和电脑比一把
  19. django的分页机制
  20. hadoop安装-redhat

热门文章

  1. 需求分析阶段项目经验
  2. [搜索]UVa 129 困难的串
  3. 初级版python登录验证,上传下载文件加MD5文件校验
  4. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记
  5. 使用Struts2标签遍历集合
  6. sskeychain使用(轻量级框架)
  7. usb调试模式已打开,adb devices显示List of devices attached 解决办法!纽维K333一键ROOT,获取ROOT权限!...
  8. 《OpenCV3编程入门》学习笔记8 图像轮廓与图像分割修复(四)图像的矩
  9. redis hash删除所有key_一文详解Redis面试中常见的5种数据结构及对应使用场景
  10. char的初始值_java从入门到放弃 各种数组的初始值?