在JObject中写入JArray

时间:2017-03-17 11:28:10

标签: c# json json.net

我有一个JSON文件。

{
  "time": [
    {
      "id": "9999",
      "name": "Foo",
      "subitem": [
        {
          "name": "Bar",
          "id": "99990",
          "visible": true,
          "subitem": [
            {
              "id": "999901",
              "name": "Flex",
              "visible": true
            },
            {
              "name": "Bear",
              "id": "999902",
              "visible": true
            },
            {
              "name": "James",
              "id": "999903",
              "visible": true
            }
          ]
        },
        {
          "name": "Smith",
          "id": "999966",
          "visible": true
        },
        {
          "name": "John",
          "id": "999933",
          "visible": true
        }
      ],
      "visible": true
    },
    {
      "name": "Doe",
      "id": "1111",
      "visible": true,
      "subitem": [
        {
          "name": "Jack",
          "id": "111111",
          "visible": true
        },
        {
          "name": "Wilson",
          "id": "111188",
          "visible": true
        },
        {
          "name": "Andy",
          "id": "111144",
          "visible": true
        },
        {
          "name": "Gibbs",
          "id": "111155",
          "visible": true
        }
      ]
    }
  ],
  "name": "asdf",
  "id": "13",
  "visible": true
}

我还有一个JObject和一个方法来获取所有JSON数据并将其存储在这个对象中。

json1 = ti.GetTimeItems();

我在另一个类中有2个方法可以写入JSON文件。数据文件夹是路径的地方。

public void WriteToJson(JObject obj)
{
    string fileName = dataFolder + "json1.json";
    WriteToJson(fileName, obj);
}

private void WriteToJson(string fileName, JObject obj)
{
    using (StreamWriter file = File.CreateText(fileName))
    using (JsonTextWriter writer = new JsonTextWriter(file))
    {
        obj.WriteTo(writer);
    }         
}//end WriteToJson

然后我有一个Windows窗体,我想从2个文本框中取出文本并将它们添加到JSON文件中。

最后我有点击事件

private void button1_Click_1(object sender, EventArgs e)
{
    //string json = File.ReadAllText(url);
    //JArray time = (JArray)json1.SelectToken("time");

    json1.Add(new JObject(
    new JProperty("name", textBoxName.Text),
    new JProperty("id", textBoxId.Text),
    new JProperty("visible", true)));
    ti.WriteToJson(json1);
}

我的问题是我似乎无法写入数组" time"在JObject中。 我设法写入文件但在root中而不是在数组内。 我尝试了json1.SelectToken(" time")和许多不同的方法,比如这个http://stackoverflow.com/questions/15413825/how-do-you-add-a-jtoken-to-an-jobject#15782238以及Newtonsoft文档中的一些方法。

任何帮助都是适当的

1 个答案:

答案 0 :(得分:3)

((JArray)json1.GetValue("time"))解决了问题。在JObject json1中选择数组并添加到该数组而不是根目录。

希望这会对某人有所帮助。

  ((JArray)json1.GetValue("time")).Add(
                new JObject(
                     new JProperty("name", textBoxName.Text),
                     new JProperty("id", textBoxId.Text),
                     new JProperty("visible", true)));



            ti.WriteToJson(json1);