前言: 在与传统的 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 地址: Func<Address,Project> func = (address) => Git clone address;
var project = func("https://github.com/Davenever/Read_Json.git");
来源: https://www.cnblogs.com/zhangnever/p/11909842.html