.net core之编辑json配置文件
2021-04-22 07:28
标签:catch 手动 系统 文件中 配置参数 try get combine dir 最近在具体项目开发应用中,项目采用的json格式配置文件,配置文件的加载采用的IConfiguration接口对象进行的管理,这是.net standard时代,微软所提供的现代化的配置管理工具。 项目设计中,需要在运行过程中,将远程服务端发送过来的配置信息回写到配置文件中。然而,必应也好,百度也罢,翻遍网络,这套现代化的配置管理模型中,却找不到一个可以改变配置回写的方法。 无奈之下,只好自己动手,手动造轮子了。 随着.NET Standard时代的来临,System.Configuration在.net core中已经不存在了,那么取而代之的是Microsoft.Extensions.Configuration系列配置管理类库: Microsoft.Extensions.Configuration.Abstractions:基础接口 Microsoft.Extensions.Configuration:实现上面的基础接口 Microsoft.Extensions.Configuration.FileProviderExtensions:提供重载配置扩展 Microsoft.Extensions.Configuration.Binder:提供转换到实体功能 Microsoft.Extensions.Configuration.FileExtensions:提供配置文件根路径扩展 关于以上类库的使用,网上有大量相关文章,如知名博主大内老A的文章中,有着系统、详细阐述,各位可自行查阅。 链接在此:https://www.cnblogs.com/artech/p/config-for-net-core.html 出于编程上的便利,我们通常不会直接利用ConfigurationBuilder创建的Configuration对象读取某个单一配置项的值,而是倾向于将一组相关的配置绑定为一个对象。 例如笔者某个项目消息主题配置参数类如下: 我们可以为配置类指定默认参数。 在需要使用配置参数的对象中,我们可以将配置类设置为属性字段 private TopicConfig topicConfig = new TopicConfig(); 当对象类被实例化时,配置类将自动被构造并拥有默认配置参数 我们在需要使用配置的对象类中,写一个加载配置类的方法和保存配置类的方法,当对象类构造时,调用并执行加载配置文件。 当配置文件存在时,判断对应的配置段是否存在,如果存在,则绑定到对应的配置类,从而实现配置参数的加载(对象类中,相关需要使用配置参数的地方,直接从配置类的获取参数); 当配置文件不存在时,加载配置方法调用保存配置方法,将默认配置回写到配置文件中。 当配置参数动态更新后需要保存时,也通过调用保存配置方法,将配置参数更新到配置文件中。 笔者采用程序目录下的"appsettings.json"文件作为配置文件 在dotnet core由于采用了更为模块化的设计方式,使用配置类需要引用相应的程序包,我们在程序中使用json配置,需要安装Microsoft.Extensions.Configuration.Json程序包。 Bind方法为扩展方法,需要项目中先安装Microsoft.Extensions.Configuration.Binder程序包。 程序包可通过Nuget包管理器进行安装。 调用json配置保存类,将配置保存到指定的位置。 笔者针对需要改写配置文件的应用的需要,自行实现了一个保存json格式配置文件的通用类,支持同时保存多个配置类。 支持对现有配置文件节点的改写和追加配置节点。 至此,我们完成了Json格式配置文件的加载、绑定与保存。 .net core之编辑json配置文件 标签:catch 手动 系统 文件中 配置参数 try get combine dir 原文地址:https://www.cnblogs.com/flyfire-cn/p/12245041.html .net core之编辑json配置文件
引言
.NET Standard时代的配置模型
相关文章资源
配置类的建议用法
1 public class TopicConfig
2 {
3 public string Project { get; set; } ="ibms";
4 public string Device { get; set; } = "gateway";
5 public string City { get; set; } = "wuhan";
6 public string Area { get; set; } = "poly";
7 }
示例json配置文件
{
"topic": {
"Project": "ibms",
"Device": "gateway",
"City": "wuhan",
"Area": "poly"
}
}
加载配置方法
1 private void LoadConfig()
2 {
3 var path = Directory.GetCurrentDirectory();
4 var config_file = "appsettings.json";
5 var full_path = Path.Combine(path, config_file);
6 if (File.Exists(full_path))
7 {
8 var builder = new ConfigurationBuilder()
9 .SetBasePath(path)
10 .AddJsonFile("appsettings.json");
11
12 IConfiguration Configuration = builder.Build();
13
14 if (Configuration.GetSection(Topic).Exists())//Topic为字符串常量,对应配置段属性名称
15 Configuration.GetSection(Topic).Bind(topicConfig);//绑定配置数据到配置类
16 }
17 else
18 {
19 SaveConfig();
20 }
21 }
保存配置方法
1 private void SaveConfig(string path = "")
2 {
3 if (path == "") path = Directory.GetCurrentDirectory();
4 Dictionarystring, object> sectionsInfo = new Dictionarystring, object>();
5
6 sectionsInfo.Add(Topic, topicConfig); //Topic为字符串常量,对应配置段属性名称
7 JsonConfigHelper.SaveJson(sectionsInfo, path);
8 }
9
通用Json配置保存类
1 using System;
2 using System.Collections.Generic;
3 using System.IO;
4 using Newtonsoft.Json;
5 using Newtonsoft.Json.Linq;
6
7 namespace flyfire.Common
8 {
9 public class JsonConfigHelper
10 {
11 public static bool SaveJson(Dictionarystring,object> sectionInfo, string configFilePath, string configFileName = "appsettings.json")
12 {
13 if (sectionInfo.Count==0)
14 return false;
15
16 try
17 {
18 var filePath = Path.Combine(configFilePath, configFileName);
19 JObject jsonObject;
20
21 if (File.Exists(filePath))
22 {
23 using (StreamReader file = new StreamReader(filePath))
24 {
25 using (JsonTextReader reader = new JsonTextReader(file))
26 {
27 jsonObject = (JObject)JToken.ReadFrom(reader);
28 }
29 }
30 }
31 else
32 {
33 jsonObject = new JObject();
34 }
35
36 foreach (var key in sectionInfo.Keys)
37 {
38 jsonObject[key] = JObject.FromObject(sectionInfo[key]);
39 }
40
41 using (var writer = new StreamWriter(filePath))
42 using (JsonTextWriter jsonwriter = new JsonTextWriter(writer)
43 {
44 Formatting = Formatting.Indented,//格式化缩进
45 Indentation = 4, //缩进四个字符
46 IndentChar = ‘ ‘ //缩进的字符是空格
47 })
48 {
49 jsonObject.WriteTo(jsonwriter);
50 return true;
51 }
52 }
53 catch (Exception)
54 {
55 return false;
56 }
57 }
58 }
59 }
文章标题:.net core之编辑json配置文件
文章链接:http://soscw.com/index.php/essay/77973.html