Net Core 中配置文件的解析

.Net core 的配置文件,不再是配置在web.config 中,而是单独的json 配置文件,解析方法:只要和合法的Json格式,怎么写随意,怎么写就怎么解析

解析方法:

首先Nuget安装如下包:

1、Microsoft.Extensions.Configuration

2、Microsoft.Extensions.Configuration.Json:解析Json文件用的

3、Microsoft.Extensions.Configuration.Xml:解析XML文件用的

4、Microsoft.Extensions.Configuration.EnvironmentVariables:解析环境变量用的

然后using Microsoft.Extensions.Configuration;

Json文件的解析

配置文件1:appsettings.json

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "UserName": "lily"
}

配置文件2:appjson.json

{
  "db": {
    "type": {
      "sqlserver": {
        "name": "sqlserver",
        "connectionString": "server=.;database=sales;uid=sa;pwd=123456;"
      },
      "mysql": {
        "name": "mysql",
        "connectionString": "server=.;database=sales;uid=root;pwd=root;"
      }
    }
  },
  "UserName": "tom",
  "Ids": [ 1, 2, 3 ],
  "Shopidlist": [{ "entid": 20 }, { "entid": 25 }]
}

读取以上两个配置文件中的节点值

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using System.IO;

namespace CoreWebApp.Controllers
{
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            //获取配置文件(json)的目录
            string currentJsonPath = Directory.GetCurrentDirectory();
            //设置配置文件所在的路径
            var builder = new ConfigurationBuilder().SetBasePath(currentJsonPath);
            builder.AddJsonFile("appsettings.json"); //将你的配置文件加入到builder中(添加一个json文件,即我要解析这个json文件)
            builder.AddJsonFile("appjson.json");//也可以添加多个配置文件,第二个参数的值为true表示即便这个appjson.json文件不存在,也不会抛异常(此参数可选,默认为false);第三个参数的值为true表示启用这个文件的热加载,即:当这个appjson.json文件的值改变的时候马上就能被应用程序监控到,应用程序取到的值就是最新的值(可选参数,它采用watch机制实现的)
            IConfiguration configRoot = builder.Build();
         
            //读取appsettings.json配置文件下的节点值 :方式1
            var includeScopesValue = configRoot.GetSection("Logging").GetSection("IncludeScopes").Value;
            var logLevelValue = configRoot.GetSection("Logging").GetSection("LogLevel").GetSection("Default").Value;
            var userName = configRoot["UserName"]; //特别注意点:如果appsettings.json,与appjson.json根节点都存在UserName,那么UserName的值以最后加入builder的那文件的UserName的值为准,所以这里值为"tom"

            //读取appsettings.json配置文件下的节点值 :方式2
            var isv = configRoot["Logging:IncludeScopes"];
            var lv = configRoot["Logging:LogLevel:Default"];


            //读取appjson.json配置文件下的节点值:方式1:
            var sqlserverValue = configRoot.GetSection("db").GetSection("type").GetSection("sqlserver").GetSection("connectionString").Value;
            var entidValue0 = configRoot.GetSection("Shopidlist").GetSection("0").GetSection("entid").Value; //获取shopidlist这个数组中,第0个元素的entid值;得到20
            var entidValue1 = configRoot.GetSection("Shopidlist").GetSection("1")["entid"]; //也可以这样写:获取shopidlist这个数组中,第1个元素的entid值;得到25
            //读取appjson.json配置文件下的节点值:方式2:
            var sv = configRoot["db:type:sqlserver:connectionString"];
            var ev = configRoot["Shopidlist:0:entid"]; //获取shopidlist这个数组中,第个元素的entid值;得到20
            var un = configRoot["UserName"];//特别注意点:如果appsettings.json,与appjson.json根节点都存在UserName,那么UserName的值以最后加入builder的那文件的UserName的值为准,所以这里值为"tom
          
            var id1 = configRoot["Ids:1"]; //获取Ids这个数组,第1个元素


            //强类型读取数据(需要你自己创建类)
            var mysqlName = configRoot.Get<RootNode>().db.type.mysql.name;

            return View();
        }
    }

    public class RootNode
    {
        public db db { get; set; }
    }
    public class db
    {
        public type type { get; set; }
    }

    public class type
    {
        public sqlserver sqlserver { get; set; }
        public mysql mysql { get; set; }
    }

    public class sqlserver
    {
        public string name { get; set; }
        public string connectionString { get; set; }
    }

    public class mysql
    {
        public string name { get; set; }
        public string connectionString { get; set; }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值