Json操作Helper类
本类主要利用Json.NET进行相应的实现,只是在其基础之上做了一个最基本的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(); if (obj==null) { return default; } 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); JObject obj= null; if (jsonText.Length>0) //避免空文件出错 { obj = JObject.Parse(jsonText); } else { obj= new JObject(); } return obj; } 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, JObject? obj = null) { 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); return; } AddConfig<T>(key,t,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");
参考资料:
Json.Net官网Introduction (newtonsoft.com)
*****有道无术,术尚可求;有术无道,止于术。*****