您现在的位置是:网站首页> 编程资料编程资料
.NetCore基础之读取配置文件详解_实用技巧_
2023-05-24
347人已围观
简介 .NetCore基础之读取配置文件详解_实用技巧_
在应用程序开发中,配置文件是主要存储系统的初始配置信息,配置文件的读取虽然属于基础内容却又经常用到,所以百丈高楼平地起,学习.Net Core,就从学习配置文件开始。在.net framework时代,配置文件主要是xml格式【web.config,app.config】,且每次修改,需要重启,但是在.Net Core中,由于跨平台的关系,配置文件多以json【appsetting.json】的形式存在,且可以进行热加载。本文以一些简单的小例子,简述如何在.Net Core中进行配置文件【Json,xml,ini,环境变量等】的读取,仅供学习分享使用,如有不足之处,还请指正。
涉及知识点
在本例中,主要进行.Net Core开发环境下的配置文件读取,涉及知识点如下:
IConfiguration:.Net Core中应用程序配置的操作接口,主要提供了对Json,xml,ini ,环境变量,内存数据等的读取功能。
ConfigurationBuilder:用于构建应用程序配置接口的构建器工具类。
安装插件
在.Net Core中,要实现配置文件的读取,需要依赖以下几个插件包,可以通过Nuget进行安装。具体如下所示:

注意:.Net Core对不同文件的解析,在不同的插件库中,可以根据实际项目需要分别进行安装。此处也体现了面向对象的设计思想【如:开闭原则,单一职责原则】。
读取Json文件
1. 准备数据
首先准备一个Json文件,如下所示:
{ "Name": "Alan.hsiang", "Age": 20, "Sex": "male", "Like": ["basketball","football","swimming"], "Score": { "LandLit": 90, "Mathematics": 99, "English": 50 } }2. 创建IConfiguration接口实例
在.Net Core中,读取配对文件是通过IConfiguration接口操作的,实例化接口对象如下所示:
IConfiguration configuration = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory).AddJsonFile("student.json").Build();3. 通过索引器进行读取
默认情况下,IConfiguration接口提供了索引器,以Key为参数进行读取,返回字符串对象,如下所示:
var name = configuration["Name"]; //IConfiguration接口自带的索引器,只返回字符串类型。如:名字 var like0 = configuration["Like:0"];//读取数组中第一个元素 如:第一个爱好 var like2 = configuration["Like:2"];//读取数组中第三个元素 如:第三个爱好 var landLit = configuration["Score:LandLit"];//获取字节点的属性值,如:语文成绩
注意:如果Json数据有层级关系,则通过冒号【:】进行表示。
4. 通过GetValue()方法进行读取
通过索引器只能返回字符串类型的值,如果需要读取其他简单类型的对象,如:int,float等,则可以通过GetValue
var age = configuration.GetValue("Age");//获取其他数据类型,如:int,如:年龄
5. 读取数组
通过索引器和泛型方法,可以读取简单类型的对象,如果需要读取复杂对象【如:数组,列表等】,则需要使用绑定,如下所示:
//获取整个数组,如:爱好 var like = new List(); configuration.Bind("Like",like);
6. 整体对象绑定
以上示例都是对Json文件局部数据的读取,那么可以将整个文件转换为对象吗?这样直接操作对象将对很方便快捷。具体如下所示:
首先复制整个Json文件的内容,然后依次点击【编辑-->选择性粘贴-->将JSON粘贴为类】菜单,如下所示:

默认生成的类名为RootObject,然后修改为Student,具体如下所示:
namespace DemoCore { 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}");7. Json示例截图

读取XML文件
在应用程序开发中,XML文件也是比较常用的一种配置文件。对XML文件的读取操作和Json文件操作基本相似,具体如下所示:
1. 创建XML文件
首先创建一个XML文件,如下所示:
Alan.hsiang 20 male basketball football swimming 90 98 60
2. 简单读取
通过索引器和GetValue可以进行读取,如下所示:
//1. 基础读取 var age = configuration.GetValue("Age");//获取其他数据类型,如:int,如:年龄 var name = configuration["Name"]; //IConfiguration接口自带的索引器,只返回字符串类型。如:名字 var like0 = configuration["Likes:Like:0"];//读取数组中第一个元素 如:第一个爱好 var like2 = configuration["Likes:Like:2"];//读取数组中第三个元素 如:第三个爱好 var landLit = configuration["Score:LandLit"];//获取字节点的属性值,如:语文成绩
注意:读取数组中的元素时,和json读取不同,因为json中是一个节点,但是在xml中是三个节点。
3. 读取数组
读取XML中的数组列表,如下所示:
//获取整个数组,如:爱好 var like = new List(); configuration.Bind("Likes:Like", like); Console.WriteLine($"name={name},age={age},like= {string.Join(",", like)}");
4. 整体绑定对象
以上示例都是对XML文件局部数据的读取,那么可以将整个文件转换为对象吗?这样直接操作对象将对很方便快捷。具体如下所示:
首先复制整个XML文件的内容,然后依次点击【编辑-->选择性粘贴-->将XML粘贴为类】菜单,如下所示:

默认生成的类,类名与XML的根节点保持一致,如下所示:
namespace DemoCore { // 注意: 生成的代码可能至少需要 .NET Framework 4.5 或 .NET Core/Standard 2.0。 /// [System.SerializableAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)] public partial class Student { private string nameField; private byte ageField; private string sexField; private string[] likesField; private StudentScore scoreField; /// public string Name { get { return this.nameField; } set { this.nameField = value; } } /// public byte Age { get { return this.ageField; } set { this.ageField = value; } } /// public string Sex { get { return this.sexField; } set { this.sexField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute("Like", IsNullable = false)] public string[] Likes { get { return this.likesField; } set { this.likesField = value; } } /// public StudentScore Score { get { return this.scoreField; } set { this.scoreField = value; } } } /// [System.SerializableAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] public partial class StudentScore { private byte landLitField; private byte mathematicsField; private byte englishField; /// public byte LandLit { get { return this.landLitField; } set { this.landLitField = value; } } /// public byte Mathematics { get { return this.mathematicsField; } set { this.mathematicsField = value; } } /// public byte English { get { return this.englishField; } set { this.englishField = value; } } } }但是默认生成的类,在转换成数组时存在问题,所以需要细微调整,如下所示:
namespace DemoCore { // 注意: 生成的代码可能至少需要 .NET Framework 4.5 或 .NET Core/Standard 2.0。 /// [System.SerializableAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)] public partial class Student { private string nameField; private byte ageField; private string sexField; private LikesLike likesField; private StudentScore scoreField; /// public string Name { get { return this.nameField; } set { this.nameField = value; } } /// public byte Age { get { return this.ageField; } set { this.ageField = value; } } /// public string Sex { get { return this.sexField; } set { this.sexField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute("Like", IsNullable = false)] public LikesLike Likes { get { return this.likesField; } set { this.likesField = value; } } /// public StudentScore Score { get { return this.scoreField; } set { this.scoreField = value; } } } /// [System.SerializableAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribut
相关内容
- 轻量级ORM框架Dapper应用之实现Join操作_实用技巧_
- 轻量级ORM框架Dapper应用之返回多个结果集_实用技巧_
- 轻量级ORM框架Dapper应用之实现In操作_实用技巧_
- 轻量级ORM框架Dapper应用之实现CURD操作_实用技巧_
- 轻量级ORM框架Dapper应用之安装Dapper_实用技巧_
- Entity Framework使用Code First模式管理事务_实用技巧_
- Entity Framework管理并发_实用技巧_
- Entity Framework使用Code First模式管理存储过程_实用技巧_
- Entity Framework使用Code First模式管理视图_实用技巧_
- Entity Framework加载控制Loading Entities_实用技巧_
点击排行
本栏推荐
