.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 基础之读取配置文件的主要内容,如果未能解决你的问题,请参考以下文章

一文了解.Net Core 3.1 Web API基础知识

重新整理 .net core 实践篇—————配置系统之军令状[七](配置文件)

.Net Core 读取Json配置文件

.net core读取json格式的配置文件

net core 简单读取json配置文件

.Net Core系列:读取配置文件