Asp.Net Core 3.1学习-读取、监听json配置文件(7)
1、前言
文件配置提供程序默认的给我们提供了ini、json、Xml等。都是读取不同格式的文件。文件配置提供程序支持文件可寻、必选、文件变更的监视。
2、读取配置文件
主要运用的包:需要Ini、xml的添加相关包就行。

这次依然使用 Core3.1 WebApi项目,在启动程序接口里面读取json配置文件,先看看json文件的格式。里面有很多嵌套的子元素。
{
"Name": "wyy",
"Age": ,
"QQ": "",
"CardInfo": {
"Name": "wyy",
"Card": "5303231999XXX",
"Birthday": "2001-02-28",
"Address": {
"Provience": "云南省",
"City": "XX市",
"Country": "XX县"
}
},
"IsMarry": true
}
我们在WeatherForecastController中修改get方法来读取配置文件
[HttpGet]
public int Get()
{
var builder = new ConfigurationBuilder();
//参数 文件路径 optional:文件不错在就会报错(默认false) reloadOnChange:文件变更了读取新的文件(默认true)
builder.AddJsonFile("config.json",optional:false,reloadOnChange:true);
var configRoot = builder.Build().GetSection("CardInfo").GetSection("Address");
var city = $"City:{configRoot["City"]}";
Console.WriteLine(city);
return ;
}
这里需要注意的是,如果有很多层就挨个的GetSection 下去,现在读取到的就是Address里面的信息。这里读取就跟MVC里面的一样的 直接configRoot["节点名"];
3、使用实体类来接收配置文件
新增一个实体类configDto,里面的信息要跟配置文件对应,数据类型也要对应,这里的原理就跟JsonConvert序列化一样 不对应的就接收不到值
public class ConfigDto
{
public string Name { get; set; }
public int Age { get; set; }
public string QQ { get; set; }
public CardInfo CardInfo { get; set; }
public bool IsMarry { get; set; } }
public class CardInfo
{
public string Name { get; set; }
public string Card { get; set; }
public string Birthday { get; set; }
public Address Address { get; set; } }
public class Address
{
public string Provience { get; set; }
public string City { get; set; }
public string Country { get; set; }
}
调用的代码
[HttpGet]
public int Get()
{
var builder = new ConfigurationBuilder();
//参数 文件路径 optional:文件不错在就会报错(默认true) reloadOnChange:文件变更了读取新的文件(默认true)
builder.AddJsonFile("config.json",optional:true,reloadOnChange:true);
ConfigDto conf = new ConfigDto();
var configRoot = builder.Build();
configRoot.Bind(conf);
return ;
}
运行项目打上断点 添加监视可以Dto也获取到值了,这样强类型的调用起来岂不是更方便。

4、监视文件的变更
[HttpGet]
public int Get()
{
var builder = new ConfigurationBuilder();
//参数 文件路径 optional:文件不错在就会报错(默认false) reloadOnChange:文件变更了读取新的文件(默认true)
builder.AddJsonFile("config.json",optional:false,reloadOnChange:true); ConfigDto conf = new ConfigDto();
var configRoot = builder.Build();
configRoot.Bind(conf);
//监视文件变更
IChangeToken token = configRoot.GetReloadToken();
ChangeToken.OnChange(() => configRoot.GetReloadToken(), () =>
{
//做你想做的事 业务逻辑
Console.WriteLine("文件修改了");
});
return ;
}
修改文件可以看到保存的时候就会出现,不知道为何会出现两次下来研究研究;

5、总结
这里主要弄了文件的读取、监视、强类型接收等操作、关于配置文件的程序修改下来慢慢研究。关于实体类型是否能设置私有有待考证。学无止境。
每日一句心灵鸡汤:其实一个人也是可以活得漂亮,自己笑给自己看,自己哭给自己听。懂得让步的人是聪明的,这是把决定事态走向的主动权握在了自己手上。感情对抗中,赢了面子就输了情分。往往死撑到底的人,都成孤家寡人。弯腰不是认输,只是为了拾起丢掉的幸福。
Asp.Net Core 3.1学习-读取、监听json配置文件(7)的更多相关文章
- asp.net core启动源码以及监听,到处理请求响应的过程
摘要 asp.net core发布至今已经将近6年了,很多人对于这一块还是有些陌生,或者说没接触过:接触过的,对于asp.net core整个启动过程,监听过程,以及请求过程,响应过程也是一知半解,可 ...
- asp.net core 二 Nginx Supervisor 负载,监听
ASP.NET Core负载均衡集群搭建(CentOS7+Nginx+Supervisor+Kestrel) asp.net core在linux运行下,一但命令行退出 ...
- ASP.NET Core Web开发学习笔记-1介绍篇
ASP.NET Core Web开发学习笔记-1介绍篇 给大家说声报歉,从2012年个人情感破裂的那一天,本人的51CTO,CnBlogs,Csdn,QQ,Weboo就再也没有更新过.踏实的生活(曾辞 ...
- ASP.NET Core实现类库项目读取配置文件
前言 之前继续在学习多线程方面的知识,忽然这两天看到博问中有个园友问到如何在.net core类库中读取配置文件,当时一下蒙了,这个提的多好,我居然不知道,于是这两天了解了相关内容才有此篇博客的出现, ...
- 一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移
不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.superviso ...
- 如何在ASP.NET Core自定义中间件中读取Request.Body和Response.Body的内容?
原文:如何在ASP.NET Core自定义中间件中读取Request.Body和Response.Body的内容? 文章名称: 如何在ASP.NET Core自定义中间件读取Request.Body和 ...
- ASP.NET Core on K8S学习初探(1)K8S单节点环境搭建
当近期的一个App上线后,发现目前的docker实例(应用服务BFF+中台服务+工具服务)已经很多了,而我司目前没有专业的运维人员,发现运维的成本逐渐开始上来,所以容器编排也就需要提上议程.因此我决定 ...
- ASP.NET Core on K8S学习初探(3)部署API到K8S
在上一篇<基本概念快速一览>中,我们把基本的一些概念快速地简单地不求甚解地过了一下,本篇开始我们会将ASP.NET Core WebAPI部署到K8S,从而结束初探的旅程. Section ...
- ASP.NET Core on K8S学习初探(2)K8S基本概念快速一览
在上一篇<单节点环境搭建>中,通过Docker for Windows在Windows开发机中搭建了一个单节点的K8S环境,接下来就是动人心弦的部署ASP.NET Core API到K8S ...
随机推荐
- Blazor WebAssembly 3.2.0 已在塔架就位 将发射新一代前端SPA框架
最美人间四月天,春光不负赶路人.在充满无限希望的明媚春天里,一路风雨兼程的.NET团队正奋力实现新的突破. 根据计划,新一代基于WebAssembly 技术研发的前端SPA框架Blazor 将于5月1 ...
- Unity 游戏框架搭建 2019 (三十二、三十三) 类的命名 & 代码文件命名
昨天我们完成了第八个示例的第二个 MenuItem 菜单顺序的调整. 我们今天再往下接着调整. 我们来看下接下来的 MenuItem 代码如下: [MenuItem("QFramework/ ...
- python 获取的json字符串取值
获取到的json字符串,然后对其取值 {u'result': {u'10.10.10.100': {u'status': u'OK', u'msg': u"{'listen': {'': s ...
- 当git上只做文件大小写重命名的修改时,如何躲坑
一. 提交时 假设修改ABC.java为Abc.java. 1.1 如果使用git命令进行仅涉及大小写的重命名 1.1.1 设置git库为大小写敏感(不建议) $ git config core.ig ...
- 【Linux网络基础】网络子网划分基础知识(IP地址,子网)
一. IP地址分类与子网划分基础 1. 什么是IP地址? 常见的ip地址版本为ipv4, ipv6 32位 4 * 8=32位. 32位二进制数字序列组成的数字序列 点分十进制 采用点将32位数字 ...
- 配置路由器/交换机的Telnet登录
实验目的:给配置路由器/交换机管理IP地址.设置Telnet的登录帐号.密码. 第一步:配置路由器的名称.接口IP地址. Switch> Switch>en Switch# Switch# ...
- 替换input单选框的样式
实现效果:. css的input单选框的样式很丑,有时候不想使用原生的样式,如上照片,可以使用下面的方法. 思路是,给inpu加visibility:hidden隐藏,然后使用不同的图片绝对定位覆盖在 ...
- POJ 3241Object Clustering曼哈顿距离最小生成树
Object Clustering Description We have N (N ≤ 10000) objects, and wish to classify them into several ...
- 2019 ICPC 银川网络赛 H. Fight Against Monsters
It is my great honour to introduce myself to you here. My name is Aloysius Benjy Cobweb Dartagnan Eg ...
- 图论--最小生成树--Kruscal 模板
#include<iostream> #include<queue> #include<algorithm> #include<set> #includ ...