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

文件解析偶发Newtonsoft.Json.JsonReaderException问题求助

解决JSON解析异常与文件占用问题

咱们先理清你遇到的两个问题的根源——其实和字符串插值$符号没啥关系,核心是异步操作未正确等待以及文件流未完全释放导致的:

问题1:JsonReaderException(读取空/不完整JSON)

你调用file.CopyToAsync(stream)时没有加await,这意味着代码会在文件复制还没完成的时候,就直接执行RetrieveModels rm = new RetrieveModels(path)。此时文件里可能是空的或者只有部分JSON内容,自然会触发JArray.Parse的异常——它根本没法从空内容里解析出合法的JArray。

问题2:文件占用异常

当你把RetrieveModels实例化移到复制代码后面,但还是没加await,此时CopyToAsync的异步写入操作还在后台跑,文件流还被占用着。这时候去读取文件,就会触发“文件正被其他进程占用”的错误。

解决办法

1. 正确等待异步文件复制操作

把UploadFile改成异步方法,给CopyToAsync加上await,确保文件完全写入、流彻底释放后,再去解析文件:

public async Task<IActionResult> UploadFile(IFormFile file) 
{ 
    if (file == null || file.Length == 0) 
        return Content("file not selected"); 
    else 
    { 
        var path = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "processes.json"); 
        using (var stream = new FileStream(path, FileMode.Create)) 
        { 
            // 等待文件复制完成,确保内容全部写入
            await file.CopyToAsync(stream); 
        } 
        // 此时using块已经释放了文件流,文件内容完整,可以安全解析
        RetrieveModels rm = new RetrieveModels(path); 
        // 后续业务逻辑...
        return Ok("文件上传并解析成功");
    } 
}

2. 给解析逻辑加一层校验(可选但推荐)

为了避免上传文件本身格式错误导致的异常,可以在RetrieveModels的构造方法里加基础校验:

public RetrieveModels(string path) 
{ 
    string jsonContent = File.ReadAllText(path);
    // 先检查内容是否为空
    if (string.IsNullOrWhiteSpace(jsonContent))
    {
        throw new InvalidOperationException("JSON文件内容为空,请检查上传的文件");
    }
    // 捕获格式异常,给更清晰的错误提示
    try
    {
        JArray json = JArray.Parse(jsonContent); 
        // 后续逻辑...
    }
    catch (JsonReaderException ex)
    {
        throw new InvalidOperationException("上传的文件不是合法的JSON数组格式", ex);
    }
}

关于字符串插值$的说明

你怀疑的$符号其实完全没问题——$@"{path}"这种写法是合法的(甚至这里根本没必要用,直接传path就行,因为它已经是完整路径了)。字符串插值本身不会导致文件路径或读取异常,不用纠结这个点。

额外小建议

  • 避免直接覆盖processes.json:可以先把上传的文件存成临时文件,验证格式没问题后再替换目标文件,防止中途出错导致原文件损坏。
  • 大文件场景下,异步操作能提升性能,但一定要牢记用await等待异步任务完成,不然容易踩各种异步相关的“坑”。

内容的提问来源于stack exchange,提问作者Zarif

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:35:56