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)

 

posted @ 2023-06-28 16:47  盛沧海  阅读(77)  评论(0编辑  收藏  举报