首页 > 编程语言 >01C# 从Json文件中读取配置

01C# 从Json文件中读取配置

时间:2023-12-13 15:57:03浏览次数:74  
标签:01 get C# Smtp Person Json config public

目的:从Json文件中读取配置

 

1)创建一个json文件,设置“如果较新则复制”

{
  "Smtp": {
    "Server": "yx165.com",
    "Name": "yx",
    "Password": "123456"
  },
  "Person": {
    "Name": "Sam",
    "Age": "20",
    "Address": {
      "Post": "010000",
      "Sheng": "Guangdong"
    },
    "chengji:0": "60",
    "chengji:1": "70"

  }

}

2)安装Nuget包:Microsoft.Extensions.Configuration,配置系统的基础包
3)安装 Nuget包:Microsoft.Extensions.Configuration.Json,读取Json文件的包
4) ConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddJsonFile("webconfig.json",optional: true,reloadOnChange: true);
optional:文件是否必须 reloadOnChange:是否重加载改变
5) IConfigurationRoot config= builder.Build();
6)读取 config.GetSection("Smtp").value;多级的话: config.GetSection("Smtp:Server").value;config.GetSection("Person:Address:Post").value;

代码如下:

ConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddJsonFile("webconfig.json",optional: true,reloadOnChange: true);


IConfigurationRoot config= builder.Build();
var smtp= config.GetSection("Smtp:Server").Value;
var person = config.GetSection("Person:chengji:0").Value;

输出:

yx165.com
60

以上方式读取Json文件,只能读取Json中类指定的某个属性,并且如果有多级别,很不方便,所以就想可否直接转换成类,下面我们就来实现

1)安装Nuget包:Microsoft.Extensions.Configuration.Binder,用于对象绑定,也就是把Json转换成类

2)创建绑定对象类,类的属性名称要跟Json文件的名称对应,不区分大小写,注意Json中集合的转换


//对应Json文件的根节点
public class WebConfig { public Person Person { get; set; } public Smtp Smtp { get; set; } } //对应Json文件子节点"Smtp" public class Smtp { public string Server { get; set; } public string name { get; set; } public string password { get; set; } } //对应Json文件子节点"Person" public class Person { public string Name { get; set; } public int Age { get; set; } public Address Address { get; set; } //对应Peson节点中的"chengji:0":"60"和"chengji :1":"70"
public List<int> chengji { get; set; }
 } 

public class Address
{
public string Post { get; set; }
public string Sheng { get; set; }
}

3)转换绑定和读取,注意根节点的读取可以直接用Get<WebConfig>()

 ConfigurationBuilder builder = new ConfigurationBuilder();
 builder.AddJsonFile("webconfig.json",optional: true,reloadOnChange: true);
 IConfigurationRoot config= builder.Build();

 //直接读取片段的方式
 //var smtp= config.GetSection("Smtp:Server").Value;
 //var person = config.GetSection("Person:chengji:0").Value;


 //转换绑定
 config.GetSection("Smtp").Bind(new Smtp());
 config.GetSection("Person").Bind(new Person());

 //读取转换后的对象
 Smtp smtp1= config.GetSection("Smtp").Get<Smtp>();
 Person person1=config.GetSection("Person").Get<Person>();

 //读取根节点
 var webConfig= config.Get<WebConfig>();

通过使用转换,就可以直接获取Json转换成对象,方便很多,推荐使用

标签:01,get,C#,Smtp,Person,Json,config,public
From: https://www.cnblogs.com/yxh33/p/17899216.html

相关文章

  • 关于C#反射概念,附带案例!
    反射C#中的反射是一种使程序在运行时能够动态地获取类型信息并调用其成员的技术。通过反射,程序可以在运行时进行类型的动态加载、创建对象、调用方法和属性,以及访问和修改字段等。反射可以使程序更加灵活,但也增加了一定的性能开销。在C#中,反射主要是通过System.Reflection命名空......
  • Linux系统中curl命令使用笔记
    在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,用来请求Web服务器,它的名字就是客户端(client)的URL工具的意思,可以说是一款很强大的http命令行工具,它支持文件的上传和下载,是综合传输工具。可以看出它的参数非常多,a-z的字母,几乎都用到了,参数这么说,功能肯定很强大......
  • Oracle删除指定用户下所有对象
     --.sql脚本--唯一注意的是下面的d:\dropuserobj.sql为操作的.sql;--用于删除当前用户的所有对象--usefordropallobjectsincurrentuser;setheadingoff;setfeedbackoff;spoold:\dropuserobj.sql;prompt--删除约束条件select'altertable'||table_name||'......
  • 国标GB28181安防监控系统/磁盘阵列EasyCVR(V.3.4)新亮点:免保活功能
    TSINGSEE青犀近日发布了EasyCVR安防管理平台的V.3.4版本,其中一大亮点就是很多朋友都在咨询的“免保活”功能,那么,什么是“免保活”功能?又该如何配置呢?在EasyCVR平台有个【按需直播】按钮,顾名思义,需要的时候才播。因此,当它被启用后,就只有在点播该视频时,平台分发出的FLV、HLS、RTS......
  • .net core 同步锁/异步锁
    一、同步锁privatestaticreadonlyobject_lock=newobject();///同步锁publicvoidTestLock(){lock(_lock){//需要处理的业务Console.Write("输出内容");......
  • UBUNTU 18.04.6 在编译linux内核的时候执行make ARCH=arm socfpga_defconfig设置默认
    在编译linux内核的时候执行makeARCH=armsocfpga_defconfig设置默认配置时报错bisonflexnotfound缺少文件:/bin/sh:1:bison:notfound 输入命令sudoapt-getinstallbison进行安装: /bin/sh:1:flex:notfound 输入命令 sudoapt-getinstallflex进行安......
  • ArgoCD Application CRD
    Application示例apiVersion:argoproj.io/v1alpha1kind:Applicationmetadata:name:guestbook#You'llusuallywanttoaddyourresourcestotheargocdnamespace.namespace:argocd#AddthisfinalizerONLYifyouwantthesetocascadedelete.......
  • net core 异步超时取消机制
    方法一:利用Task.WhenAnynamespaceConsoleApp1{internalclassProgram{staticvoidMain(string[]args){Console.WriteLine("Hello,World!");CancellationTokenSourcects=newCancellationTokenSource......
  • Codeforces Round 810 (Div. 2)
    基本情况A题秒了,B、C题死活看不懂题目。B.PartyProblem-B-Codeforces错误分析为啥看不懂题目,一方面是英语水平确实不够,另一方面就是图的意识不行,如果能看出来这题隐含的建图思想,就很有助于理解题目。正确思路题意有\(T\)组数据,每组数据给你一组\(n,m\)表示共......
  • OEM DBConsole manually
    Step1.Droptheexistingconfigurationifitishavingsysmanuseralreadypresent.SQL>Selectusernamefromdba_userswhereusername='SYSMAN';USERNAME------------------------------SYSMANThebelowcommandtodroptheexistingconfigu......