You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:31:01