Zasadniczo jest kilka problemów,
- Otwierasz nowy StreamWriter dla każdego obiektu Pracownik, co powoduje nadpisywanie pliku. Powinieneś otworzyć StreamWriter raz, zapisać wszystkie dane, a następnie go zamknąć.
Przy deserializacji spróbuj - mapować to co zwracasz do obiektu deserializując listę Pracownik, i przypisująć ją do Pracownik.Pracownicy, bo aktualnie nie przypisujesz.
Uzywaj logów podczas serializacji aby sprawdzić aktualny stan obiektów.
saveFileDialog1.Filter = "txt Files|*.txt|All Files|*.*";
if (MessageBox.Show("Czy chcesz zapisać wszystkie dane?", "Zamykanie", MessageBoxButtons.YesNoCancel) == DialogResult.Yes)
{
try
{
saveFileDialog1.ShowDialog();
if (!string.IsNullOrEmpty(saveFileDialog1.FileName))
{
using (StreamWriter fs = new StreamWriter(saveFileDialog1.FileName))
{
fs.Write(JsonSerializer.Serialize(Pracownik.Pracownicy));
}
}
}
catch (Exception ex)
{
MessageBox.Show("Wystąpił nieoczekiwany błąd podczas zapisywania: " + ex.Message, "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Pracownik.PrepareDGV(dataGridView1);
refresh();
if (MessageBox.Show("Czy chcesz załadować istniejące już dane?", "Ładowanie", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
try
{
openFileDialog1.ShowDialog();
if (!string.IsNullOrEmpty(openFileDialog1.FileName))
{
using (FileStream fs = new FileStream(openFileDialog1.FileName, FileMode.Open))
{
Pracownik.Pracownicy = JsonSerializer.Deserialize<List<Pracownik>>(fs);
}
refresh();
}
}
catch (FileNotFoundException ex)
{
MessageBox.Show("Nie znaleziono pliku: " + ex.Message, "Błąd ładowania", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (JsonException ex)
{
MessageBox.Show("Błąd deserializacji danych: " + ex.Message, "Błąd ładowania", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (Exception ex)
{
MessageBox.Show("Wystąpił nieoczekiwany błąd: " + ex.Message, "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
void refresh()
{
dataGridView1.Rows.Clear();
foreach (Pracownik p in Pracownik.Pracownicy)
{
int index = dataGridView1.Rows.Add(p.tbl);
dataGridView1.Rows[index].Tag = p;
}
}