using Newtonsoft.Json; using System; using System.IO; using System.Collections.Generic; using System.Threading.Tasks; namespace PSO2SERVER.Json { public class JsonRead { // 泛型方法:读取并反序列化 JSON 文件 public static async Task DeserializeJsonAsync(string filePath, JsonSerializerSettings settings = null) { if (string.IsNullOrEmpty(filePath)) { Logger.Write("文件路径不能为空"); return default(T); } if (!File.Exists(filePath)) { Logger.Write($"文件不存在: {filePath}"); return default(T); } try { // 异步读取文件内容 string json = await Task.Run(() => File.ReadAllText(filePath)); // 如果文件内容为空,记录日志并返回默认值 if (string.IsNullOrWhiteSpace(json)) { Logger.Write($"文件内容为空: {filePath}"); return default(T); } // 反序列化 JSON return JsonConvert.DeserializeObject(json, settings ?? new JsonSerializerSettings()); } catch (JsonException jsonEx) { // 捕获 JSON 反序列化异常 Logger.Write($"JSON 反序列化错误:{jsonEx.Message} 文件: {filePath}"); return default(T); } catch (FileNotFoundException fnfEx) { // 捕获文件找不到异常 Logger.Write($"文件未找到错误:{fnfEx.Message} 文件: {filePath}"); return default(T); } catch (UnauthorizedAccessException uaEx) { // 捕获权限相关的异常 Logger.Write($"权限错误:{uaEx.Message} 文件: {filePath}"); return default(T); } catch (Exception ex) { // 捕获其他未知异常 Logger.Write($"读取或反序列化文件 {filePath} 时发生异常: {ex.Message}"); return default(T); } } // 同步版本:用于不需要异步操作的场景 public static T DeserializeJson(string filePath, JsonSerializerSettings settings = null) { if (string.IsNullOrEmpty(filePath)) { Logger.Write("文件路径不能为空"); return default(T); } if (!File.Exists(filePath)) { Logger.Write($"文件不存在: {filePath}"); return default(T); } try { string json = File.ReadAllText(filePath); if (string.IsNullOrWhiteSpace(json)) { Logger.Write($"文件内容为空: {filePath}"); return default(T); } return JsonConvert.DeserializeObject(json, settings ?? new JsonSerializerSettings()); } catch (JsonException jsonEx) { Logger.Write($"JSON 反序列化错误:{jsonEx.Message} 文件: {filePath}"); return default(T); } catch (Exception ex) { Logger.Write($"读取或反序列化文件 {filePath} 时发生异常: {ex.Message}"); return default(T); } } } }