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



我有一个包含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();
}

您收到此错误是因为您正在尝试写入打开以供读取的文件。

若要解决此问题,代码需要先关闭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);

相关内容

  • 没有找到相关文章

最新更新