Jobject 在嵌套元素中使用 .Add

Posted

技术标签:

【中文标题】Jobject 在嵌套元素中使用 .Add【英文标题】:Jobject using .Add in a nested element 【发布时间】:2021-12-22 22:07:14 【问题描述】:

如果我有一个 Json 对象:

 
"data":
      "SomeArray":[
         
            "name":"test1"
         ,
         
            "name":"test2"
         ,
         
            "name":"test3"
         
      ]
   

这个对象是使用Jobject.Parse(jsonString);解析的

如何在data 下添加一个字段,该字段保存数组中要转发给另一个系统的项目的计数。计数已经计算过了。我只需要像这样添加它:

 
"data":
      "Count" : 3,
      "SomeArray" : [

我试过了

myJObject["data"].Add("Count",count);

但是 .Add 在这里不起作用。我看到的唯一选项是AddAfterSelf()

有没有办法只添加一个简单的键值对而不必先创建Jproperty 并使用AddAfterSelf 添加它?

或者是正确的方式:x["Data"].AddAfterSelf(new JProperty("Count", count));

【问题讨论】:

【参考方案1】:

这里的问题是myJObject["data"] 返回一个JToken,它是JObject 的基类。

如果您确定“数据”将始终是一个对象,您可以执行以下操作

var data = myJObject.GetValue("data") as JObject;
data.Add("Count",120);

【讨论】:

我如何将数据添加回原始 JObject,只需执行 myJObject["data"] = data; @Bike_dotnet 你不应该这样做。它会自动出现在myJObject,因为它是被引用的数据类型。【参考方案2】:

您可以通过将您从myJObject["data"] 获得的JToken 转换为JObject 来做到这一点。例如:

var data = (JObject)myJObject["data"];
data.Add("Count", 3);

【讨论】:

以上是关于Jobject 在嵌套元素中使用 .Add的主要内容,如果未能解决你的问题,请参考以下文章

C#中jobject 命名空间的啥

使用 JObject 修改集合中的 JSON 字段

带有 JObject 元素的 C# JsonResult 返回空数组

如何在不添加新 JObject 键/名称的情况下将 JArray 添加到 JObject 中?

JSON在JObject返回类型中返回空数组

如何使用 json.net 将 json 数组添加到 JObject 的属性中