.Net Core读取Json配置文件的实现示例
2019-12-02 18:11
1256 查看
前言:在与传统的asp.net MVC项目相比,.net core项目在项目目录的文件结构上和功能上与前者都有很大的区别。例如:在.net core中使用Startup.cs取代Global.asax文件用于加载应用程序的配置和各种启动项。appsettings.json取代web.config文件用于存储应用程序所需的配置参数等等。。。
OK!步入正题,下面来说一下如何读取Json配置文件中的参数。
第一种:使用IConfiguration接口
我们先在appsettings.json中配置好数据库连接字符串,然后读取它
{ "Connection": { "dbContent": "Data Source=.;Initial Catalog=test;User ID=sa;Password=123456" }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*" }
在控制器中注入IConfiguration接口
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; namespace Read.json.Controllers { [ApiController] [Route("[controller]")] public class ReadController : Controller { private IConfiguration _configuration; public ReadController(IConfiguration configuration) { _configuration = configuration; } [HttpPost] public async Task<string> ReadJson() { //读参 string conn = _configuration["Connection:dbContent"]; return ""; } } }
当然也可以读取数组形式的json,一样的先在appsettings.json中写好配置参数,如下:
{ "Connection": { "dbContent": "Data Source=.;Initial Catalog=test;User ID=sa;Password=123456" }, //------------------------ "Content": [ { "Trade_name": { "test1": "小熊饼干", "test2": "旺仔QQ糖", "test3": "娃哈哈牛奶" } } ], //------------------------ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*" }
比如我们想读取test1
string commodity_test1 = _configuration["Content:0:Trade_name:test1"];
第二种:使用IOptions<T>来读取json配置文件
先把NuGet包导进项目:Microsoft.Extensions.Options.ConfigurationExtensions
首先在appsettings.json中添加节点如下
{ "Connection": { "dbContent": "Data Source=.;Initial Catalog=test;User ID=sa;Password=123456" }, //------------------------ "Content": [ { "Trade_name": { "test1": "小熊饼干", "test2": "旺仔QQ糖", "test3": "娃哈哈牛奶" } } ], //------------------------ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*", //============================== "Information": { "school": { "Introduce": { "Name": "实验小学", "Class": "中班", "Number": "15人" }, "Region": { "Province": "湖北", "City": "武汉", "Area": "洪山区" }, "Detailed_address": [ { "Address": "佳园路207号" } ] } } //============================== }
然和再建立一个与这个节点"相同"的类
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace Read.json { public class Information { public School school { get; set; } } public class School { public Introduce Introduce { get; set; } public Region Region { get; set; } public List<Detailed_address> data { get; set; } } public class Introduce { public string Name { get; set; } public string Class { get; set; } public string Number { get; set; } } public class Region { public string Province { get; set; } public string City { get; set; } public string Area { get; set; } } public class Detailed_address { public string Address { get; set; } } }
在Startup中添加如下代码
#region 服务注册,在控制器中通过注入的形式使用 services.AddOptions(); services.Configure<Information>(Configuration.GetSection("Information")); #endregion
控制器中使用:
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Options; namespace Read.json.Controllers { [Route("api/[controller]/[action]")] [ApiController] public class ReadController : Controller { private IConfiguration _configuration; readonly Information _Information; readonly IOptions<Information> _options; public ReadController(IConfiguration configuration, Information Information, IOptions<Information> options) { _configuration = configuration; _Information = Information; _options = options; } [HttpGet] public async Task<IActionResult> ReadInformation() { string Address = _options.Value.school.Region.Province + "-" + _options.Value.school.Region.City + "-" + _options.Value.school.Region.Area + "-" + _options.Value.school.Detailed_address[0].Address + "-" + _options.Value.school.Introduce.Name + "-" + _options.Value.school.Introduce.Class + "-" + _options.Value.school.Introduce.Number; return Json(Address); } [HttpPost] public async Task<string> ReadJson() { string conn = _configuration["Connection:dbContent"]; string commodity = _configuration["Content:0:Trade_name:test1"]; return ""; } } }
第三种:这种应该比较常见,任意读取自定义的json文件
首先建立一个json文件
{ "system_version": { "Edition": ".Net Core 3.0", "Project_Name": "Read.json" } }
再建一个类,封装一个方法
using Microsoft.Extensions.Configuration; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace Read.json { public class Json_File { public IConfigurationRoot Read_Json_File() { //这句代码会读取read_json.json中的内容 return new ConfigurationBuilder().AddJsonFile("read_json.json") .Build(); } } }
在控制器中调用:
[HttpGet] public async Task<IActionResult> ReadSystemVersion() { var configuration = _json_File.Read_Json_File(); string system = "使用的是" + configuration["system_version:Edition"] + "的版本" + "," + "项目名称是" + configuration["system_version:Project_Name"]; return Json(new { data = system }); }
Demo地址:https://github.com/Davenever/Read_Json.git
以上就是本文的全部内容,希望对大家的学习有所帮助
您可能感兴趣的文章:
相关文章推荐
- Linux C代码实现读取配置文件示例
- java使用dom4j解析xml配置文件实现抽象工厂反射示例
- [转]ExtJs入门之filefield:文件上传的配置+结合Ajax完美实现文件上传的asp.net示例
- c++实现逐行读取配置文件写入内存的示例
- Python实现读写INI配置文件的方法示例
- python实现数通设备tftp备份配置文件示例
- 用java读写ini配置文件的原因以及实现 示例
- python实现数通设备tftp备份配置文件示例
- Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
- Control Study->AdRotator广告控件显示自定义配置文件中广告以及与DataGrid控件结合使用显示图片(示例代码下载)
- ASP.NET 2.0 HttpHandler实现对某种文件类型权限保护(示例代码下载)
- Java 实现自动监听并更新配置文件内容
- ASP.NET 2.0 HttpHandler实现对某种文件类型权限保护(示例代码下载)
- 关于读写配置文件MBean实现结构的调整
- Control Study->AdRotator广告控件显示自定义配置文件中广告以及与DataGrid控件结合使用显示图片(示例代码下载)
- web.config配置文件示例(转载)
- ASP.NET 2.0 HttpHandler实现对某种文件类型权限保护(示例代码下载)
- ASP.NET 2.0 中一种新的方法实现对配置文件的加密
- 用TreeView控件实现资源管理器(显示本地硬盘下所有文件夹和文件,并可以浏览图片)(示例代码下载)
- ibatis支持多配置文件实现