.net core 基础之读取配置文件
Posted 火冰·瓶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.net core 基础之读取配置文件相关的知识,希望对你有一定的参考价值。
一、通过nuget安装扩展包
需要安装如下扩展包
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.Binder
Microsoft.Extensions.Configuration.Json
二、在启动项目中新建json文件
"Name": "Alan.hsiang", "Age": 20, "Sex": "male", "Like": [ "basketball", "football", "swimming" ], "Score": "LandLit": 90, "Mathematics": 99, "English": 50
三、创建IConfiguration接口实例,通过索引器读取配置文件
//IConfiguration configuration = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory).AddJsonFile("tsconfig.json").Build(); //可以指定路径 IConfiguration configuration = new ConfigurationBuilder().AddJsonFile("tsconfig.json",true,true).Build(); var name = configuration["Name"]; //IConfiguration接口自带的索引器,只返回字符串类型。如:名字 var like0 = configuration["Like:0"];//读取数组中第一个元素 如:第一个爱好 var like2 = configuration["Like:2"];//读取数组中第三个元素 如:第三个爱好 var landLit = configuration["Score:LandLit"];//获取字节点的属性值,如:语文成绩
四、整体对象绑定
新建一个cs类文件,然后复制整个Json文件的内容,依次点击【编辑-->选择性粘贴-->将JSON粘贴为类】菜单
默认生成的类名为RootObject,然后修改为Student,具体如下所示:
namespace TestProjectTools public class Student public string Name get; set; public int Age get; set; public string Sex get; set; public string[] Like get; set; public Score Score get; set; public class Score public int LandLit get; set; public int Mathematics get; set; public int English get; set;
将Student类和配置对象进行绑定,如下所示:
//2. 复杂读取 var student = new Student(); configuration.Bind(student); Console.WriteLine($"name=student.Name,age=student.Age,like= string.Join(",", student.Like),score=student.Score.English");
重新整理 .net core 实践篇—————配置系统之军令状[七](配置文件)
前言
介绍一下配置系统中的配置文件,很多服务的配置都写在配置文件中,也是配置系统的大头。
正文
在asp .net core 提供了下面几种配置文件格式的读取方式。
Microsoft.extensions.configuration.Ini
Microsoft.extensions.configuration.Json
Microsoft.extensions.configuration.NewtonsoftJson
Microsoft.extensions.configuration.Xml
Microsoft.extensions.configuration.UserSecrets
这里演示json的,因为大多数的我们用的还是json。
那么这里就要引入:Microsoft.extensions.configuration.Json 这个库。
在根目录在创建appsettings.json 这个文件:
里面如下:
{
"key1": "value1",
"key2": "value2"
}
代码:
IConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddJsonFile(System.AppDomain.CurrentDomain.BaseDirectory + "/appsettings.json");
var configurationRoot = builder.Build();
Console.WriteLine(configurationRoot["key1"]);
Console.WriteLine(configurationRoot["key2"]);
结果:
如果说文件找不到,那么可能是下面这种情况,要设置复制过去。
如果我们这个appsettings.json 不存在的话,那么会报错。
当然我们可以设置如果没有这个appsettings.json 也不报错。
我添加了一个不存在的配置文件appsettings_dev.json,那么会报错。
IConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddJsonFile(System.AppDomain.CurrentDomain.BaseDirectory + "/appsettings.json");
builder.AddJsonFile(System.AppDomain.CurrentDomain.BaseDirectory + "/appsettings_dev.json");
var configurationRoot = builder.Build();
Console.WriteLine(configurationRoot["key1"]);
Console.WriteLine(configurationRoot["key2"]);
报错如下:
但是如果设置optional,那么是可选的,没有的话也不会报错。
builder.AddJsonFile(System.AppDomain.CurrentDomain.BaseDirectory + "/appsettings_dev.json",optional:true);
这里面同样AddJsonFile有一个属性reloadOnChange,这个属性设置是否当我们配置文件修改的时候,是否重新加载这个文件,默认为true。
IConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddJsonFile(System.AppDomain.CurrentDomain.BaseDirectory + "/appsettings.json",optional:false,reloadOnChange: true);
var configurationRoot = builder.Build();
Console.WriteLine(configurationRoot["key1"]);
Console.WriteLine(configurationRoot["key2"]);
Console.ReadKey();
Console.WriteLine(configurationRoot["key1"]);
Console.WriteLine(configurationRoot["key2"]);
Console.ReadKey();
修改后,按下enter键。
修改内容如下:
{
"key1": "value1_change",
"key2": "value2_change"
}
这里只演示了json文件,其实文件也一样。
因为在前面中分析过ConfigurationRoot 这个类,知道它的索引,后面添加的文件配置会覆盖前面的,这里再贴一下。
public string this[string key]
{
get
{
for (int i = _providers.Count - 1; i >= 0; i--)
{
IConfigurationProvider provider = _providers[i];
if (provider.TryGet(key, out string value))
{
return value;
}
}
return null;
}
set
{
if (!_providers.Any())
{
throw new InvalidOperationException(SR.Error_NoSources);
}
foreach (IConfigurationProvider provider in _providers)
{
provider.Set(key, value);
}
}
}
是倒着获取的。
结
下一节 配置系统之间谍[八](文件监听)
以上只是个人整理,如有错误,望请指出,谢谢。
以上是关于.net core 基础之读取配置文件的主要内容,如果未能解决你的问题,请参考以下文章