本类主要利用Json.NET进行相应的实现,只是在其基础之上做了一个最基本的Json读写工具类。
其源码如下:
public static class JsonConfigHelper { const string fileName = "config.json"; static bool hasFile = false; /// <summary> /// 读取json文件中需要的键值数据 /// </summary> /// <typeparam name="T">要读取的数据类型</typeparam> /// <param name="key">读取的名称或键值</param> /// <returns>返回相应的T</returns> public static T? ReadConfig<T>(string key) { if (!hasFile) { HasFile(); } var obj = Read(); var values = obj[key]; if (values != null) { T result = values.ToObject<T>(); return result; } return default(T); } private static JObject Read() { string jsonText = File.ReadAllText(fileName); return JObject.Parse(jsonText); } private static void HasFile() { if (hasFile && File.Exists(fileName) == false)//如果不存在就创建file文件夹 { FileStream f = File.Create(fileName); f.Close(); return; } hasFile = true; } /// <summary> /// 添加新的配置 /// </summary> /// <typeparam name="T">添加配置中t 的数据类型</typeparam> /// <param name="key">添加的配置名称或键值</param> /// <param name="t">添加的对象或值</param> public static void AddConfig<T>(string key, T t) { var obj = Read(); if (obj.ContainsKey(key)) { UpdateConfig<T>(key, t,obj); return; } obj.Add(key, JToken.FromObject(t)); Write2File(obj); } /// <summary> /// 更新config /// </summary> /// <typeparam name="T">更新的 t 的数据类型</typeparam> /// <param name="key">需要更新的名称</param> /// <param name="t">需要更新的对象或值</param> public static void UpdateConfig<T>(string key, T t, JObject? obj = null) { obj ??= Read(); if (obj.ContainsKey(key)) { obj[key] = JToken.FromObject(t); Write2File(obj); } } private static void Write2File(JObject obj) { string jsonText = JsonConvert.SerializeObject(obj); File.WriteAllText(fileName, jsonText); } }
使用示例:
JsonConfigHelper.AddConfig<string>(nameof(WifiName), WifiName); JsonConfigHelper.AddConfig<string>(nameof(WifiPassword), WifiPassword);
var precise = JsonConfigHelper.ReadConfig<SurgicalSetting>("PreciseSugicalSetting");