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

C#中无法编辑JSON文件求助:可读取但无法保存修改

JSON更新后无法保存的排查与解决

我整理了几个大概率导致该问题的原因,以及对应的解决步骤:

1. 确认文件路径是否错误

你使用的相对路径./BearsVersion.json是基于程序的当前工作目录,而非项目文件所在目录。比如在VS中运行程序时,实际工作目录可能是bin/Debug/netX.X这类输出目录,你修改的是该目录下的文件,而非项目根目录的原文件。

验证方法:在写入前添加代码打印实际路径:

var fullPath = Path.GetFullPath("./BearsVersion.json");
Console.WriteLine($"实际写入路径:{fullPath}");

前往打印的路径查看文件是否被修改,不要仅盯着项目根目录的文件。

2. 排查权限或文件占用问题

File.WriteAllText在无权限或文件被其他进程锁定时会抛出异常,但如果代码未添加异常捕获,就只会执行成功提示逻辑,无法感知失败。

修改代码添加异常捕获:

try
{
    var updatedJson = JsonSerializer.Serialize(updatedDict);
    File.WriteAllText(path, updatedJson);
    Console.WriteLine("更新成功");
}
catch (IOException ex)
{
    Console.WriteLine($"写入失败:{ex.Message}");
}

如果是权限问题,给目标目录添加修改权限;如果是文件被占用,关闭打开该文件的编辑器或进程。

3. 确认JSON序列化内容正确性

默认序列化配置可能导致生成的JSON格式异常,先打印序列化后的字符串验证:

var options = new JsonSerializerOptions { WriteIndented = true };
var updatedJson = JsonSerializer.Serialize(updatedDict, options);
Console.WriteLine("序列化后的JSON:");
Console.WriteLine(updatedJson);
// 再执行写入操作
File.WriteAllText(path, updatedJson);

若打印内容是正确的{"test1":"ADDING SUCCESSFUL","test2":"WORLD"},则序列化无问题,问题出在写入环节;若内容异常,需调整序列化配置。

4. 异步流程中使用异步写入方法

你调用的是await FileHelper.UpdateVersions(...),方法内的写入操作建议使用异步版本,避免同步阻塞引发潜在问题:

await File.WriteAllTextAsync(path, updatedJson);

避免混用同步与异步操作,保证整个流程异步执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 08:24:59