.NetCore基础之读取配置文件详解

目录
  • 涉及知识点
  • 安装插件
  • 读取Json文件
    • 1.准备数据
    • 2.创建IConfiguration接口实例
    • 3.通过索引器进行读取
    • 4.通过GetValue<T>()方法进行读取
    • 5.读取数组
    • 6.整体对象绑定
    • 7.Json示例截图
  • 读取XML文件
    • 1.创建XML文件
    • 2.简单读取
    • 3.读取数组
    • 4.整体绑定对象
    • 5.示例截图
  • 读取INI文件
    • 1.创建ini文件
    • 2.创建配置并读取
    • 3.示例截图
  • 读取环境变量
    • 1.查看环境变量
    • 2.简单读取
    • 3.示例截图
  • 备注

在应用程序开发中,配置文件是主要存储系统的初始配置信息,配置文件的读取虽然属于基础内容却又经常用到,所以百丈高楼平地起,学习.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<T>()方法进行读取

通过索引器只能返回字符串类型的值,如果需要读取其他简单类型的对象,如:int,float等,则可以通过GetValue<T>()方法进行,具体如下所示:

 var age = configuration.GetValue<int>("Age");//获取其他数据类型,如:int,如:年龄

5. 读取数组

通过索引器和泛型方法,可以读取简单类型的对象,如果需要读取复杂对象【如:数组,列表等】,则需要使用绑定,如下所示:

 //获取整个数组,如:爱好
 var like = new List<string>();
 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文件,如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<Student>
    <Name>Alan.hsiang</Name>
    <Age>20</Age>
    <Sex>male</Sex>
    <Likes>
        <Like>basketball</Like>
        <Like>football</Like>
        <Like>swimming</Like>
    </Likes>
    <Score>
        <LandLit>90</LandLit>
        <Mathematics>98</Mathematics>
        <English>60</English>
    </Score>
</Student>

2. 简单读取

通过索引器和GetValue可以进行读取,如下所示:

//1. 基础读取

var age = configuration.GetValue<int>("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<string>();
 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。
    /// <remarks/>
    [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;

        /// <remarks/>
        public string Name
        {
            get
            {
                return this.nameField;
            }
            set
            {
                this.nameField = value;
            }
        }

        /// <remarks/>
        public byte Age
        {
            get
            {
                return this.ageField;
            }
            set
            {
                this.ageField = value;
            }
        }

        /// <remarks/>
        public string Sex
        {
            get
            {
                return this.sexField;
            }
            set
            {
                this.sexField = value;
            }
        }

        /// <remarks/>
        [System.Xml.Serialization.XmlArrayItemAttribute("Like", IsNullable = false)]
        public string[] Likes
        {
            get
            {
                return this.likesField;
            }
            set
            {
                this.likesField = value;
            }
        }

        /// <remarks/>
        public StudentScore Score
        {
            get
            {
                return this.scoreField;
            }
            set
            {
                this.scoreField = value;
            }
        }
    }

    /// <remarks/>
    [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;

        /// <remarks/>
        public byte LandLit
        {
            get
            {
                return this.landLitField;
            }
            set
            {
                this.landLitField = value;
            }
        }

        /// <remarks/>
        public byte Mathematics
        {
            get
            {
                return this.mathematicsField;
            }
            set
            {
                this.mathematicsField = value;
            }
        }

        /// <remarks/>
        public byte English
        {
            get
            {
                return this.englishField;
            }
            set
            {
                this.englishField = value;
            }
        }
    }

}

但是默认生成的类,在转换成数组时存在问题,所以需要细微调整,如下所示:

namespace DemoCore
{
    // 注意: 生成的代码可能至少需要 .NET Framework 4.5 或 .NET Core/Standard 2.0。
    /// <remarks/>
    [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;

        /// <remarks/>
        public string Name
        {
            get
            {
                return this.nameField;
            }
            set
            {
                this.nameField = value;
            }
        }

        /// <remarks/>
        public byte Age
        {
            get
            {
                return this.ageField;
            }
            set
            {
                this.ageField = value;
            }
        }

        /// <remarks/>
        public string Sex
        {
            get
            {
                return this.sexField;
            }
            set
            {
                this.sexField = value;
            }
        }

        /// <remarks/>
        [System.Xml.Serialization.XmlArrayItemAttribute("Like", IsNullable = false)]
        public LikesLike Likes
        {
            get
            {
                return this.likesField;
            }
            set
            {
                this.likesField = value;
            }
        }

        /// <remarks/>
        public StudentScore Score
        {
            get
            {
                return this.scoreField;
            }
            set
            {
                this.scoreField = value;
            }
        }
    }

    /// <remarks/>
    [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;

        /// <remarks/>
        public byte LandLit
        {
            get
            {
                return this.landLitField;
            }
            set
            {
                this.landLitField = value;
            }
        }

        /// <remarks/>
        public byte Mathematics
        {
            get
            {
                return this.mathematicsField;
            }
            set
            {
                this.mathematicsField = value;
            }
        }

        /// <remarks/>
        public byte English
        {
            get
            {
                return this.englishField;
            }
            set
            {
                this.englishField = value;
            }
        }
    }

    public partial class LikesLike {
        public string[] Like { get; set; }
    }
}

然后在读取时,进行整体绑定,如下所示:

 //2. 复杂读取
 var student = new Student();
 configuration.Bind(student);
 Console.WriteLine($"name={student.Name},age={student.Age},like= {string.Join(",", student.Likes.Like)},score={student.Score.English}");

5. 示例截图

注意:通过示例方向,读取XML和读取Json文件,存在细微的差异。

读取INI文件

ini文件在C#程序中,一般应用的不是很多,主要是键值对文件,主要用于存储简单的数据格式,如下所示:

1. 创建ini文件

一般情况下,ini文件包括以下几个部分:a. 注释 用分号做前缀,b. 节点用中括号表示,c. key=value表示内容。如下所示:

 ;此处表示注释
 [student]
 Name=Alan.hsiang
 Age=20
 Grade=4

2. 创建配置并读取

在.Net Core中读取ini文件的步骤,非常简单,如下所示:

private static void ReadIni() {
    IConfiguration configuration = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory).AddIniFile("student.ini").Build();
    string name = configuration["student:Name"];//如果没有节点,则直接用key进行获取即可
    var age = configuration.GetValue<int>("student:Age");
    var grade = configuration.GetValue<int>("student:Grade");
    Console.WriteLine($"name={name},age={age},grade= {string.Join(",", grade)}");
 }

注意:由于ini文件不涉及复杂的数据结构,所以直接通过索引器和GetValue即可。

3. 示例截图

读取ini文件的示例截图如下所示:

读取环境变量

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。环境变量相当于给系统或用户应用程序设置的一些参数,具体起什么作用这当然和具体的环境变量相关。

1. 查看环境变量

在win10操作系统中,此电脑-->右键-->属性-->高级系统设置-->环境变量-->然后打开环境变量对话框。如下所示:

环境变量分为用户变量【当前用户】,和系统变量【全部用户】,如下所示:

2. 简单读取

在.NetCore中读取环境变量的值,如下所示:

private static void ReadEnvironmentVariable() {
      IConfiguration configuration = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory).AddEnvironmentVariables().Build();
       var path = configuration["Path"];
       var temp = configuration["TEMP"];
       var os = configuration["OS"];
       var arr = path.Split(";");
       Console.WriteLine("path:");
       foreach (var a in arr)
       {
           Console.WriteLine(a);
       }
       Console.WriteLine($"temp={temp}\n os= {os}");
}

3. 示例截图

读取环境变量示例截图如下所示:

备注

以上是在.Net Core中读取几种常见数据的方式

到此这篇关于.NetCore基础之读取配置文件详解的文章就介绍到这了,更多相关.Net Core 读取配置文件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • .NET Core读取配置文件方式详细总结

    基于.NET Core的跨平台开发,配置文件与之前.NET Framework采用xml的config文件不同,目前主要是采用json文件键值对配置方式读取. 参考网上相关资料总结如下: 一. 引入扩展 System.Configuration.ConfigurationManager Nuget 下载扩展,Install-Package System.Configuration.ConfigurationManager 使用方式:添加配置文件App.config.读取方式与原.NET Fram

  • .Net Core读取Json配置文件的实现示例

    前言:在与传统的asp.net MVC项目相比,.net core项目在项目目录的文件结构上和功能上与前者都有很大的区别.例如:在.net core中使用Startup.cs取代Global.asax文件用于加载应用程序的配置和各种启动项.appsettings.json取代web.config文件用于存储应用程序所需的配置参数等等... OK!步入正题,下面来说一下如何读取Json配置文件中的参数. 第一种:使用IConfiguration接口 我们先在appsettings.json中配置好

  • .NET Core简单读取json配置文件

    背景 目前发现网上的 .NET Core 读取 json 格式的配置文件有点麻烦,自己想搞个简单点的. .NET Core 目前的主流形式是采用 json 格式来存储配置文件信息,跟之前的诸如 app.config 和 web.config 等 xml 形式的配置文件有所区别. json 文件 demo appsettings.json: { "name": "wen", "age": 26, "family": { &quo

  • 如何在ASP.NET Core类库项目中读取配置文件详解

    前言 最近有朋友问如何在.net core类库中读取配置文件,当时一下蒙了,这个提的多好,我居然不知道,于是这两天了解了相关内容才有此篇文章的出现,正常来讲我们在应用程序目录下有个appsettings.json文件对于相关配置都会放在这个json文件中,但是要是我建立一个类库项目,对于一些配置比如密钥或者其他需要硬编码的数据放在JSON文件中,在.net core之前配置文件为web.config并且有相关的类来读取节点上的数据,现如今在.net core中为json文件,那么我们该如何做?本

  • ASP.NET Core读取配置文件

    ASP.NET Core 中,可以使用 ConfigurationBuilder 对象来构建. 主要分为三部:配置数据源 -> ConfigurationBuilder -> 使用. 数据源可来自字典或配置文件. 数据源要么继承 IConfigurationSource ,要么从配置文件中读取. 1,来自字典 我们先使用字典存储键值对,来设置配置, test = 配置,然后使用 ConfigurationBuilder.Add() 方法添加数据源, Add 方法可以添加继承了 IConfigu

  • .NET Core读取配置文件的方法

    配置文件是每个项目最基础的部分,也是不可或缺的部分,比如:数据库连接.中间件属性等常见的配置. 今天这篇文章主要内容就是,在.Net Core项目中怎样去读取配置文件并使用. 提前准备 appsettings.json 文件 { "User": { "userName": "赵一", "userAge": 18 } } 对应实体模型 public class UserOption { public string userNam

  • .NetCore基础之读取配置文件详解

    目录 涉及知识点 安装插件 读取Json文件 1.准备数据 2.创建IConfiguration接口实例 3.通过索引器进行读取 4.通过GetValue<T>()方法进行读取 5.读取数组 6.整体对象绑定 7.Json示例截图 读取XML文件 1.创建XML文件 2.简单读取 3.读取数组 4.整体绑定对象 5.示例截图 读取INI文件 1.创建ini文件 2.创建配置并读取 3.示例截图 读取环境变量 1.查看环境变量 2.简单读取 3.示例截图 备注 在应用程序开发中,配置文件是主要存

  • Spring整合SpringMVC + Mybatis基础框架的配置文件详解

    前言 新建一个普通的Maven项目 基本目录结构 ├── src # │ ├── main # │ │ └── java # java代码目录 │ │ └── resources # 配置文件目录, 存放下面Spring配置文件 │ ├── test # 单元测试目录 ├── web # web目录 │ └── WEB-INF # web.xml 配置文件目录 1. Mybatis层编写 1.在 resources 目录下新建数据库配置文件 database.properties jdbc.dr

  • go学习笔记读取consul配置文件详解

    目录 新建yaml文件 读取远程配置 新建yaml文件 在上文我们的 go学习笔记:使用 consul 做服务发现和配置共享 这里我们单独来用viper实现读取consul的配置, 我习惯与用yaml格式, 所以 首先 新建yaml文件 store: book: - author: john price: 10 - author: ken price: 12 bicycle: color: red price: 19.95 读取远程配置 可以直接调用viper.AddRemoteProvider

  • Go微服务项目配置文件的定义和读取示例详解

    目录 前言 场景 定义配置 配置文件 加载配置文件 实现原理 总结 项目地址 前言 我们在写应用时,基本都会用到配置文件,从各种 shell 到 nginx 等,都有自己的配置文件.虽然这没有太多难度,但是配置项一般相对比较繁杂,解析.校验也会比较麻烦.本文就给大家讲讲我们是怎么简化配置文件的定义和解析的. 场景 如果我们要写一个 Restful API 的服务,配置项大概有如下内容: Host,侦听的 IP,如果不填,默认用 0.0.0.0 Port,侦听的端口,必填,只能是数字,大于等于80

  • SpringBoot yml配置文件读取方法详解

    目录 yaml介绍 yaml语法规则 yaml数据读取 Environment读取yaml全部属性数据 自定义对象封装指定数据 yaml介绍 YAML(YAML Ain't Markup Language),一种数据序列化格式 优点: 容易阅读 容易与脚本语言交互 以数据为核心,重数据轻格式 YANL文件扩展名 .yml(主流) .yaml 几种数据格式比较 yaml语法规则 大小写敏感 属性层级关系使用多行描述,每行结尾使用冒号结束 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许

  • MyBatis框架零基础快速入门案例详解

    目录 一.创建数据库和表 二.创建maven工程 三.代码编写 1.编写Student实体类 2.编写DAO接口StudentDao 3.编写DAO接口Mapper映射文件StudentDao.xml. 4.创建MyBatis主配置文件 四.创建测试类进行测试 1.创建测试类MyBatisTest 2.配置日志功能 五.增删改操作 insert操作 MyBatis下载地址:https://github.com/mybatis/mybatis-3/releases 一.创建数据库和表 数据库名ss

  • django基础之数据库操作方法(详解)

    Django 自称是"最适合开发有限期的完美WEB框架".本文参考<Django web开发指南>,快速搭建一个blog 出来,在中间涉及诸多知识点,这里不会详细说明,如果你是第一次接触Django ,本文会让你在感性上对Django有个认识,完成本文操作后会让你有兴趣阅读的相关书籍和文档. 本文客操作的环境,如无特别说明,后续都以下面的环境为基础: =================== Windows 7/10 python 3.5 Django 1.10 ======

  • Mybatis Generator最完美配置文件详解(完整版)

    最近没做项目,重新整理了一个最完整的Mybatis Generator(简称MBG)的最完整配置文件,带详解,再也不用去看EN的User Guide了: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"

  • Mysql my.ini 配置文件详解

    Mysql my.ini 配置文件详解 #BEGIN CONFIG INFO #DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负载大 #TYPE: SYSTEM #END CONFIG INFO # # 此mysql配置文件例子针对4G内存 # 主要使用INNODB #处理复杂队列并且连接数量较少的mysql服务器 # # 将此文件复制到/etc/my.cnf 作为全局设置, # mysql-data-dir/my.cnf 作为服务器指定设置 # (@loc

随机推荐