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
相关产品推荐
相关产品推荐

