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

C#中向JObject添加新空JObject报错,求解决方法

解决向JObject添加空对象的异常问题

这个问题我之前也碰到过,是对JObject的构造和添加方式理解有点偏差导致的,我来给你捋清楚:

你抛出的Can not add Newtonsoft.Json.Linq.JValue to Newtonsoft.Json.Linq.JObject异常,核心原因是**new JObject(fm.Name)的写法不符合JObject的构造规则**:JObject的这个构造函数接受的是JToken类型参数,而fm.Name是字符串,会被自动包装成JValue类型,但JObject的子元素必须是JProperty(键值对形式),所以直接把JValue塞进去肯定会报错。

正确的实现方式有两种:

方式一:直接使用Add方法的键值对重载

这是最简洁的写法,直接指定要添加的键名和空JObject:

JObject json = JObject.Parse(File.ReadAllText("path"));
// fm.Name就是你要添加的新键名,比如和report/expense同级的新字段
json.Add(fm.Name, new JObject());

方式二:先创建JProperty再添加

如果需要更灵活地处理属性(比如后续要给属性加额外配置),可以先构造JProperty再加入JObject:

JObject json = JObject.Parse(File.ReadAllText("path"));
// 创建键为fm.Name、值为空JObject的属性
JProperty newEmptyProperty = new JProperty(fm.Name, new JObject());
json.Add(newEmptyProperty);

额外提示:避免重复键异常

如果不确定目标JSON里是否已经存在同名键,建议先做检查,防止抛出重复键的异常:

JObject json = JObject.Parse(File.ReadAllText("path"));
if (!json.ContainsKey(fm.Name))
{
    json.Add(fm.Name, new JObject());
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:22:44