JsonFileStore.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using System;
  2. using System.IO;
  3. using Newtonsoft.Json;
  4. namespace TeamAAS
  5. {
  6. /// <summary>
  7. /// JSON 文件持久化工具(Newtonsoft.Json)。
  8. /// 供各设备管理器、配方、产品元数据等统一使用,替代各处重复的
  9. /// SaveConfig/LoadConfig 样板代码。
  10. /// </summary>
  11. public static class JsonFileStore
  12. {
  13. /// <summary>
  14. /// 保存对象到 JSON 文件(自动创建目录)。成功返回 true。
  15. /// </summary>
  16. public static bool Save<T>(string path, T data, JsonSerializerSettings settings = null)
  17. {
  18. if (string.IsNullOrEmpty(path) || data == null) return false;
  19. try
  20. {
  21. var dir = Path.GetDirectoryName(path);
  22. if (!string.IsNullOrEmpty(dir)) Directory.CreateDirectory(dir);
  23. var json = JsonConvert.SerializeObject(data,
  24. settings ?? new JsonSerializerSettings { Formatting = Formatting.Indented });
  25. File.WriteAllText(path, json);
  26. return true;
  27. }
  28. catch (Exception ex)
  29. {
  30. AppLogger.Error($"JSON 保存失败: {path}", ex, nameof(JsonFileStore));
  31. return false;
  32. }
  33. }
  34. /// <summary>
  35. /// 从 JSON 文件读取对象。文件不存在或反序列化失败返回 default(T)。
  36. /// </summary>
  37. public static T Load<T>(string path, JsonSerializerSettings settings = null)
  38. {
  39. if (string.IsNullOrEmpty(path) || !File.Exists(path)) return default(T);
  40. try
  41. {
  42. var json = File.ReadAllText(path);
  43. return JsonConvert.DeserializeObject<T>(json, settings);
  44. }
  45. catch (Exception ex)
  46. {
  47. AppLogger.Error($"JSON 读取失败: {path}", ex, nameof(JsonFileStore));
  48. return default(T);
  49. }
  50. }
  51. }
  52. }