在JSON文件中附加对象的最佳方法?

Eya*_*l C 1 c# wpf json json.net

我有一个包含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();
}
Run Code Online (Sandbox Code Playgroud)

Vse*_*nin 5

您收到此错误,是因为您试图将文件写入可读取的文件。

要解决此问题,您的代码需要先关闭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);
Run Code Online (Sandbox Code Playgroud)

另外,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);
Run Code Online (Sandbox Code Playgroud)