I have a JSON file with Person
objects and I can't find a comfortable way to append more objects.
Example:
[
{"name": "x", "id": "001"}
]
I tried with List<> and serialize/deserialize but it doesn't seems to work.
Edit:
This happens after clicking a button:
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();
}
You get this error because you're trying to write into file which is open for reading.
To fix this your code needs to close the StreamReader
first and then write to the file.
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);
Alternatively, File
class provides a shortcut for reading files and you code can look like this:
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);