2017-03-17 146 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);