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

C# WinForms中如何向JSON文件追加数据?使用Newtonsoft遇阻

用Newtonsoft.Json给JSON文件追加数据的解决方案

嗨,我明白你想给现有的JSON数组追加新的Smoothie数据,之前用Newtonsoft没成功对吧?别担心,咱们一步步来搞定这个问题。

首先要明确:直接往JSON文件末尾写新的对象字符串会破坏JSON的结构(原文件是数组格式),正确的做法是先读取并解析现有数据,添加新对象后再重新序列化写回文件。

步骤1:补全你的实体类

先把Smoothie类补全,确保和JSON里的所有字段对应:

public class Smoothie
{
    public string Name { get; set; }
    public string Calories { get; set; }
    public string Country { get; set; }
    public int Longtitude { get; set; } // 和JSON字段名保持一致,注意拼写
    public int Latitude { get; set; }
}

步骤2:完整的追加数据代码示例

下面是可直接使用的全流程代码,包含读取现有数据、添加新对象、写回文件的完整逻辑:

using Newtonsoft.Json;
using System.Collections.Generic;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        // 替换成你的JSON文件实际路径
        string jsonFilePath = @"C:\your-folder\smoothies.json";

        // 1. 读取并解析现有数据,处理文件不存在或为空的情况
        List<Smoothie> smoothies = new List<Smoothie>();
        if (File.Exists(jsonFilePath))
        {
            string existingJson = File.ReadAllText(jsonFilePath);
            // 反序列化为对象集合,为空时初始化新列表
            smoothies = JsonConvert.DeserializeObject<List<Smoothie>>(existingJson) ?? new List<Smoothie>();
        }

        // 2. 创建要追加的新Smoothie对象
        var newSmoothie = new Smoothie
        {
            Name = "Mango",
            Calories = "60,1",
            Country = "Asia",
            Longtitude = 54321,
            Latitude = 98765
        };

        // 3. 将新对象添加到集合中
        smoothies.Add(newSmoothie);

        // 4. 序列化回格式化后的JSON字符串(带缩进,方便阅读)
        string updatedJson = JsonConvert.SerializeObject(smoothies, Formatting.Indented);

        // 5. 写回JSON文件
        File.WriteAllText(jsonFilePath, updatedJson);
    }
}

关键要点解释

  • 为什么不能直接追加字符串? 原JSON是标准数组格式[ {...}, {...} ],如果直接把{...}写到文件末尾,会变成[ {...}, {...} ]{...},这是非法JSON,无法被正常解析。必须先把整个数组转换成对象集合,添加新元素后再重新生成合法的JSON结构。
  • 异常场景处理:代码里判断了文件是否存在,避免了文件不存在时反序列化报错的问题;同时处理了反序列化结果为空的情况,保证程序稳定性。
  • 字段匹配注意:实体类的属性名要和JSON里的键完全一致(Newtonsoft默认大小写不敏感,但保持一致能避免不必要的问题),比如你JSON里的Longtitude拼写,实体类也要对应。

如果之前尝试失败,大概率是直接往文件里追加字符串导致的结构错误,用上面的方法就能解决啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:16:34