Почему я не могу записать BindingList в .txt, используя JSON? - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь добавить содержимое моего списка привязок в текстовый файл. Однако я всегда получаю следующую ошибку:

System.NullReferenceException: Object reference not set to an instance of an object. 

Что я делаю не так? Если это помогает, текстовый файл пуст.

Код:

BindingList<Student> StudentCollection = new BindingList<Student>();

private void btnAddStudent_Click(object sender, EventArgs e)
{
    Student StudentSave = new Student
    {
        ID = txtStudentID.Text,
        FirstName = txtFirstName.Text,
        LastName = txtLastName.Text,
        Age = nudAge.Value,
        Height = nudHeight.Value,
        Schoolclass = txtSchoolClass.Text,
        Gender = cbxGender.Text,
    };

    cbxStudentIDs.DataSource = StudentCollection;
    cbxStudentIDs.DisplayMember = "ID";
    StudentCollection.Add(StudentSave);

}
public class Student
{
    public string ID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public decimal Age { get; set; }
    public decimal Height { get; set; }
    public string Schoolclass { get; set; }
    public string Gender { get; set; }

}

private void Form1_Load(object sender, EventArgs e)
{
    string studentCollectionString = File.ReadAllText(FilePath);
    StudentCollection = JsonConvert.DeserializeObject<BindingList<Student>>(studentCollectionString);
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    string studentCollectionString = JsonConvert.SerializeObject(StudentCollection);
    File.WriteAllText(FilePath, studentCollectionString);
}

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Проблема

Здесь вы получите исключение, поскольку вы упомянули, что текстовый файл пуст, а StudentCollection будет установлен на null

StudentCollection = JsonConvert.DeserializeObject<BindingList<Student>>(studentCollectionString);

Решение

Вы должны изменить код следующим образом: ? гарантирует, что операция продолжится, только если у вас есть действительный результат в текстовом файле.

JsonConvert.DeserializeObject<BindingList<Student>>(studentCollectionString)?.ToList().ForEach(a => StudentCollection.Add(a));
0 голосов
/ 05 мая 2020

Убедитесь, что ваш путь к файлу существует, если он не существует, вы должны создать файл, а затем записать в файл, также убедитесь, что ваш json не пуст

https://docs.microsoft.com/en-us/dotnet/api/system.io.file.create?view=netcore-3.1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...