2017-03-17 33 views
1

我有一个JSON文件。在JObject中写入JArray

{ 
    "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); 
} 

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

任何帮助appriciated

回答

2

问题通过((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);