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

使用System.Text.Json.JsonSerializer写入文件时未完全覆盖内容的问题

问题根源分析:FileStream写入未完全覆盖旧内容

相关代码

internal class Program
{
    static async Task Main(string[] args)
    {
        var t = new Thing() { Name = "Some Long Name" };
        string path = @"c:\_Temporary\serialized.json";
        using var fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
        await JsonSerializer.SerializeAsync(fs, t);
    }

    class Thing
    {
        public string Name { get; set; }
    }
}

运行现象

  • 首次运行后,文件内容:
{"Name":"Some Long Name"}
  • 将Name改为"Short Name"后重新运行,文件内容变为:
{"Name":"Short Name"}me"}

问题根源

这是FileStream的使用方式有误导致的问题,和JsonSerializer无关。

使用FileMode.OpenOrCreate模式打开文件时,若文件已存在,流会直接打开现有文件但不会截断其原有长度。新写入的内容只会覆盖文件开头对应字节数的部分,未被覆盖的旧内容会保留在文件末尾,最终形成无效的JSON内容。

内容的提问来源于stack exchange,提问作者rory.ap

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 10:44:51