使用C#类读取JSON文件并获取数据时遇到问题
问题分析与修复方案
核心问题1:JSON结构与反序列化类型不匹配
你的JSON根节点是单个对象(包含ProcessDetails数组),但读取方法里错误地将其反序列化为List<MetaFileReaderWriterObject>(对象列表),这会直接导致反序列化失败或返回空值。
核心问题2:读取方法调用语法错误
调用代码里的实例化写法存在语法错误,同时方法名拼写不一致(定义的方法是MestaReader,调用时写成了MetaReader)。
修复后的代码
1. 修正读取方法
将反序列化目标类型改为单个根对象:
public static MetaFileReaderWriterObject MestaReader(string metaFilePath) { MetaFileReaderWriterObject returnData = default!; try { using StreamReader fileData = new(metaFilePath); string dataString = fileData.ReadToEnd(); // 反序列化为单个根对象,而非列表 returnData = JsonConvert.DeserializeObject<MetaFileReaderWriterObject>(dataString)!; return returnData; } catch(Exception ex) { WriteLogClass.WriteToLog(3, $"Exception at Meta file reader: {ex.Message}", 1); return returnData!; } }
2. 修正调用代码
修复语法错误并正确调用读取方法:
private static bool ReadMetaFile(string pathHoldFolder) { string filePath = Directory.GetParent(pathHoldFolder)!.FullName!; string fileLocation = Directory.GetFiles(filePath, "Meta_*.json", SearchOption.TopDirectoryOnly).FirstOrDefault()!; // 修复方法名拼写和语法错误 MetaFileReaderWriterClass.MetaFileReaderWriterObject jsonData = MetaFileReaderWriterClass.MestaReader(fileLocation); if (jsonData?.ProcessDetails?.FirstOrDefault() != null) { Console.WriteLine($"Json Data:{jsonData.ProcessDetails.FirstOrDefault().DownloadStatus}"); } else { Console.WriteLine("未读取到有效JSON数据"); } return false; }
3. 额外优化建议
- 避免滥用
!强制空值抑制符,添加空值检查可有效防止空引用异常。 - 确保
fileLocation确实获取到了存在的JSON文件,可在调用前增加文件存在性判断。 - 在catch块中输出
ex.ToString(),获取包含堆栈跟踪的完整异常信息,便于快速定位问题。
内容的提问来源于stack exchange,提问作者S4NDM4N
相关产品推荐
相关产品推荐

