配置基类
该类主要用于判断传递的值是否为类对象,方便赋值
1 public interface IBaseConfigEntity 2 { 3 4 }
配置类
建立配置存储类
1 public class Test : IBaseConfigEntity 2 { 3 public string Name { get; set; } 4 }
帮助类
用于更改appsettings.json配置文件
1 public class ConfigUtils 2 { 3 public static bool UpdateConfig<T>(Dictionary<string, T> sectionInfo, string configFileName = "appsettings.json") 4 { 5 var type = typeof(T); 6 if (sectionInfo.Count == 0) 7 { 8 return false; 9 } 10 try 11 { 12 var filePath = Path.Combine(Directory.GetCurrentDirectory(), configFileName); 13 JObject jsonObject; 14 if (File.Exists(filePath)) 15 { 16 using (var file = new StreamReader(filePath)) 17 { 18 using (var reader = new JsonTextReader(file)) 19 { 20 jsonObject = (JObject)JToken.ReadFrom(reader); 21 } 22 } 23 } 24 else 25 { 26 jsonObject = new JObject(); 27 } 28 29 foreach (var key in sectionInfo.Keys) 30 { 31 var data = sectionInfo[key]; 32 if (key.Contains(":")) 33 { 34 GetValueByKey(jsonObject, key, data, type); 35 } 36 else 37 { 38 if (typeof(IBaseConfigEntity).IsAssignableFrom(type)) 39 { 40 jsonObject[key] = JObject.FromObject(sectionInfo[key]); 41 } 42 else 43 { 44 jsonObject[key] = data.ToString(); 45 } 46 } 47 48 } 49 50 using (var writer = new StreamWriter(filePath)) 51 using (var jsonwriter = new JsonTextWriter(writer) 52 { 53 Formatting = Formatting.Indented,//格式化缩进 54 Indentation = 4, //缩进四个字符 55 IndentChar = ' ' //缩进的字符是空格 56 }) 57 { 58 jsonObject.WriteTo(jsonwriter); 59 return true; 60 } 61 } 62 catch (Exception) 63 { 64 return false; 65 } 66 } 67 68 69 /// <summary> 70 /// 根据key设置值 71 /// </summary> 72 /// <param name="jsonObject"></param> 73 /// <param name="key"></param> 74 private static void GetValueByKey<T>(JObject jsonObject, string key, T data, Type type) 75 { 76 var keys = key.Split(":"); 77 if (keys.Length > 1) 78 { 79 var value = (JObject)jsonObject[keys[0]]; 80 GetValueByKey(value, key.Replace($"{keys[0]}:", ""), data, type); 81 } 82 else 83 { 84 if (typeof(IBaseConfigEntity).IsAssignableFrom(type)) 85 { 86 jsonObject[key] = JObject.FromObject(data); 87 } 88 else 89 { 90 jsonObject[key] = data.ToString(); 91 } 92 } 93 94 } 95 }
调用方式1
"test:key" 表示appsettings中 test 下的key配置, 可一次性多个传入,传入的值可以是对象也可以是字符串
1 var s = new Test 2 { 3 Name = "123" 4 }; 5 ConfigUtils.UpdateConfig(new Dictionary<string, Test> 6 { 7 {"test:key",s}, 8 });
调用方式2
1 ConfigUtils.UpdateConfig(new Dictionary<string, string> 2 { 3 {"test:key","我是需要修改的值"}, 4 });
修改后效果
{ "test": { "key": { "Name": "123" } } }
public class ConfigUtils{public static bool UpdateConfig<T>(Dictionary<string, T> sectionInfo, string configFileName = "appsettings.json"){var type = typeof(T);if (sectionInfo.Count == 0){return false;}try{var filePath = Path.Combine(Directory.GetCurrentDirectory(), configFileName);JObject jsonObject;if (File.Exists(filePath)){using (var file = new StreamReader(filePath)){using (var reader = new JsonTextReader(file)){jsonObject = (JObject)JToken.ReadFrom(reader);}}}else{jsonObject = new JObject();}
foreach (var key in sectionInfo.Keys){var data = sectionInfo[key];if (key.Contains(":")){GetValueByKey(jsonObject, key, data, type);}else{if (typeof(IBaseConfigEntity).IsAssignableFrom(type)){jsonObject[key] = JObject.FromObject(sectionInfo[key]);}else{jsonObject[key] = data.ToString();}}
}
using (var writer = new StreamWriter(filePath))using (var jsonwriter = new JsonTextWriter(writer){Formatting = Formatting.Indented,//格式化缩进Indentation = 4, //缩进四个字符IndentChar = ' ' //缩进的字符是空格}){jsonObject.WriteTo(jsonwriter);return true;}}catch (Exception){return false;}}
/// <summary>/// 根据key设置值/// </summary>/// <param name="jsonObject"></param>/// <param name="key"></param>private static void GetValueByKey<T>(JObject jsonObject, string key, T data, Type type){var keys = key.Split(":");if (keys.Length > 1){var value = (JObject)jsonObject[keys[0]];GetValueByKey(value, key.Replace($"{keys[0]}:", ""), data, type);}else{if (typeof(IBaseConfigEntity).IsAssignableFrom(type)){jsonObject[key] = JObject.FromObject(data);}else{jsonObject[key] = data.ToString();}}
}} 标签:core,JObject,jsonObject,json,key,appsettings,var,new,data From: https://www.cnblogs.com/GoingForward0923/p/16775094.html