Json操作Helper类

发布时间 2023-06-28 17:02:12作者: 盛沧海

本类主要利用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");