我有一个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文档中的一些方法。
任何帮助都是适当的
答案 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);