.net core读取json文件中的数组和复杂数据

2024-04-23 19:32:03 浏览数 (2)

首先放出来需要读取的jsoin文件内容,这次我们主要来说如何读取plist和hlist,前面的读取方法可以参照之前的文章,链接如下

.net Core 配置文件热加载

.Net Core读json文件

代码语言:javascript复制
{
  "loginName": "sysAdmin",
  "loginDB": {
    "server": "192.168.10.1",
    "uid": "sa",
    "pwd": "123456"
  },
  "JAVA_HOME": "123",
  "plist": [ 11, 12, 13, 14, 15 ],
  "hlist": [
    {
      "server1name": "abc",
      "server2port": "192.168.20.11"
    },
    {
      "server1name": "bbc",
      "server2port": "192.1678.11.15"
    }
  ]
}

这里我将介绍四种方法读取plist与hlist

使用:运算符读取

我在configuration处打了断点,观察读取到的数据值

在这里插入图片描述在这里插入图片描述

我们可以看到plist和hlist的保存形式,我们下面直接使用key值读取

代码语言:javascript复制
IConfiguration configuration = new ConfigurationBuilder()
	.SetBasePath(Environment.CurrentDirectory)
	.AddJsonFile($"appsettings.json", optional: true, reloadOnChange: true)
	.Build();
var data1 = configuration["plist:3"];
var data2 = configuration["hlist:0:server1name"];

使用GetSection读取

这个方法就是每次读取当前节点的子节点,比较简单看看代码即可

代码语言:javascript复制
IConfiguration configuration = new ConfigurationBuilder()
	.SetBasePath(Environment.CurrentDirectory)
	.AddJsonFile($"appsettings.json", optional: true, reloadOnChange: true)
	.Build();
var data1 = configuration.GetSection("plist").GetSection("3").Value;
var data2 = configuration.GetSection("hlist").GetSection("0").GetSection("server1name").Value;

使用GetValue得到指定类型的数据

在使用这个方法之前需要添加Microsoft.Extensions.Configuration.Binder引用

这个方法的作用是可以直接获得想要的类型的数据

代码语言:javascript复制
configuration.GetValue("plist:10", -1);

这段代码后的-1表示,如果未读取到“plist:10”,则默认为-1

代码语言:javascript复制
IConfiguration configuration = new ConfigurationBuilder()
	.SetBasePath(Environment.CurrentDirectory)
	.AddJsonFile($"appsettings.json", optional: true, reloadOnChange: true)
	.Build();
var data1 = configuration.GetValue<int>("plist:3");
var data2 = configuration.GetValue("plist:10", -1);

使用Get、Bind:“强类型方式”

这里我们需要做一个这样的操作。

复制json文件,粘贴的时候,选择 编辑-> 选择性粘贴->将json粘贴为实体类,这样可以自动生成实体类

这里附上我粘贴生成的类

代码语言:javascript复制
		public class Rootobject
        {
            public string loginName { get; set; }
            public Logindb loginDB { get; set; }
            public string JAVA_HOME { get; set; }
            public int[] plist { get; set; }
            public Hlist[] hlist { get; set; }
        }
        public class Logindb
        {
            public string server { get; set; }
            public string uid { get; set; }
            public string pwd { get; set; }
        }
        public class Hlist
        {
            public string server1name { get; set; }
            public string server2port { get; set; }
        }
代码语言:javascript复制
IConfiguration configuration = new ConfigurationBuilder()
             .SetBasePath(Environment.CurrentDirectory)
             .AddJsonFile($"appsettings.json", optional: true, reloadOnChange: true)
             .Build();
            Rootobject rootobject = new Rootobject();
            configuration.Bind(rootobject);
            var data1 = rootobject.hlist[0].server1name;
            var data2 = rootobject.loginDB.pwd;
            Console.WriteLine(data1);
            Console.WriteLine(data2);
代码语言:javascript复制
            var rootobject1 = configuration.Get<Rootobject>();
            var data3 = rootobject1.hlist[0].server1name;
            var data4 = rootobject1.loginDB.pwd;
            Console.WriteLine(data3);
            Console.WriteLine(data4);

这里也是有两种读取方式,第一种是实例化一个对象将对象与配置文件进行绑定,第二种方法是直接将配置文件转换成需要的对象。

0 人点赞