我有一个包含Person
个对象的JSON文件,我无法找到一种方法来追加更多对象。
例如:
[
{"name": "x", "id": "001"}
]
我尝试使用List<>并序列化/反序列化但它似乎不起作用。
修改
单击按钮后会发生这种情况:
Person person = new Person();
person.fName = name.Text;
person.id = int.Parse(id.Text);
string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\Project\\";
using (StreamReader r = new StreamReader(path + "persons.json")) {
string json = r.ReadToEnd();
List<Person> persons = JsonConvert.DeserializeObject<List<Person>>(json);
persons.Add(person);
string newJson = JsonConvert.SerializeObject(persons);
File.WriteAllText(path + "persons.json", newJson);
r.Close();
}
答案 0 :(得分:4)
您收到此错误是因为您正在尝试写入可供阅读的文件。
要解决此问题,您的代码需要首先关闭StreamReader
,然后写入文件。
Person person = new Person();
person.fName = name.Text;
person.id = int.Parse(id.Text);
string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\Project\\";
using (StreamReader r = new StreamReader(path + "persons.json")) {
string json = r.ReadToEnd();
List<Person> persons = JsonConvert.DeserializeObject<List<Person>>(json);
persons.Add(person);
string newJson = JsonConvert.SerializeObject(persons);
}
File.WriteAllText(path + "persons.json", newJson);
或者,File
类提供了读取文件的快捷方式,代码可以如下所示:
Person person = new Person();
person.fName = name.Text;
person.id = int.Parse(id.Text);
string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\Project\\";
string json = File.ReadAllText("path + "persons.json");
List<Person> persons = JsonConvert.DeserializeObject<List<Person>>(json);
persons.Add(person);
string newJson = JsonConvert.SerializeObject(persons);
File.WriteAllText(path + "persons.json", newJson);