Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在现有JArray中添加JObject?_C#_Json_Json.net - Fatal编程技术网

C# 如何在现有JArray中添加JObject?

C# 如何在现有JArray中添加JObject?,c#,json,json.net,C#,Json,Json.net,我的工作项目如下: JObject sampleObj = "{ "operator": "AND", "rules": [ { "field": "Entity.Country", "condition": "=", "value": "'USA'" }, { "field": "Entity.ShortName", "co

我的工作项目如下:

JObject sampleObj = "{
      "operator": "AND",
      "rules": [
        {
          "field": "Entity.Country",
          "condition": "=",
          "value": "'USA'"
        },
        {
          "field": "Entity.ShortName",
          "condition": "=",
          "value": "'Adele'"
        }
      ]
    }"
如何在JSON中的JArray“规则”中添加另一个JObject?如下

    JObject Parent  =
          "{
    "operator": "AND",
    "rules": [{
            "field": "Entity.Country",
            "condition": "=",
            "value": "'USA'"
        },
        {
            "field": "Entity.ShortName",
            "condition": "=",
            "value": "'Adele'"
        },
        {
            "operator": "AND",
            "rules": [{
                    "field": "Entity.Country",
                    "condition": "=",
                    "value": "'USA'"
                },
                {
                    "field": "Entity.ShortName",
                    "condition": "=",
                    "value": "'Adele'"
                }
            ]
        }
    ]
}" 
我试过:

Parent["rules"].Add(sampleObj);
Parent.selectToken("rules").Add(sampleObj);
但是,智能感知不允许我这么做。致力于 C#+Newtonsoft.Json库:

'JToken' does not contain a definition for 'Add' and no accessible extension method 'Add' accepting a first argument of type 'JToken' could be found (are you missing a using directive or an assembly reference?)  

您的问题是在
Parent[“rules”].Add(sampleObj)
中使用的访问器方法返回一个,它是所有可能的JSON值(原语或非原语)的抽象基类。因此,它没有
Add()
方法,因为表示原语值的派生类没有
Add()
方法

因此,您需要将
Parent[“rules”]
强制转换为其实际类型,即,为了添加数组项:

((JArray)Parent["rules"]).Add(sampleObj);
如果您认为它看起来更干净,则可以使用替代内联强制转换的方法,该方法的作用相同:

Parent.Value<JArray>("rules").Add(sampleObj);
类似地,返回一个
JToken
,因此也需要强制转换

相关的:


演示小提琴。

听起来你需要施放
((JArray)Parent[“rules”])。添加(sampleObj)
非常感谢您分享这些有用的链接,朋友。这确实很有帮助@dbc
var array = Parent.Value<JArray>("rules") ?? (JArray)(Parent["rules"] = new JArray());
array.Add(sampleObj);