zoukankan      html  css  js  c++  java
  • .Net Core读取Json配置文件

    前言:在与传统的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");

     

  • 相关阅读:
    java知识总结-15
    java知识总结-14
    java知识总结-13
    Java知识总结-12
    Java知识总结-11
    Java知识总结-10
    Java知识总结-9
    Java知识总结-8
    Java知识总结-7
    SSO
  • 原文地址:https://www.cnblogs.com/zhangnever/p/11909842.html
Copyright © 2011-2022 走看看