在JArray中添加名称-值对到JObject

4
{
    "x": null,
    "y": null,
    "z": null,
    "things": [
        {
            "x": 1,
            "y": 1
        },
        {
            "x": 1,
            "y": 6
        }
    ]
}

我希望将另一对值推入things[0],以便它读取

"things": [
{
    "x": 1,
    "y": 1,
    "z": 9000
},

我可以轻松地像这样修改值:
JObject myobject = JObject.Parse(responseString);
JArray myarray = (JArray)myobject["things"];

myarray[0]["x"] = 9000;

我无法弄清如何向这个对象添加/追加内容。似乎myarray[0]是一个JToken,即使在执行GetType()时它是一个对象。


你使用了 myarray[0]["z"] = 9000; 吗? - Ajay
1个回答

13

将数组项转换为JObject,然后使用Add方法添加新的JProperty。示例如下:

JObject myobject = JObject.Parse(responseString);
JArray myarray = (JArray)myobject["things"];

JObject item = (JObject)myarray[0];
item.Add(new JProperty("z", 9000));

Console.WriteLine(myobject.ToString());

Fiddle: https://dotnetfiddle.net/5Cb5lu


谢谢Brian!:D 顺便问一下,为什么需要这个?即使在我进行强制转换之前,数组项报告为LinQ.JObject类型。 - Didier Drogba
JTokenJObjectJArrayJValue等类的基类。 Type属性存在是为了让您有一种方法来查找它是哪种类型的JToken,以便在需要时可以适当地进行转换。JToken本身没有Add方法,而JObjectJArray有,因此您必须将其强制转换为正确的子类才能调用该方法。明白了吗? - Brian Rogers
非常有道理 :) 再次感谢Brian的详细解释。 - Didier Drogba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接