不创建和加载 .JSON 文件 c#

Not creating and loading .JSON file c#

我试图在我的程序开头加载现有的 .json 文件(如果它们已经存在),如果它们不存在则创建它们。当我第一次使用它时它正在工作,但现在我已经将我的程序分成几层,它已经停止工作了。谁能知道为什么会这样?

public static void ConvertStudentsToJson()
{
     var studentsgrades = ClassOfStudents.Students.Select(x => new { x.StudentName, x.StudentId, x.GradesRecord });

     JsonSerializer serializer = new JsonSerializer();
     serializer.NullValueHandling = NullValueHandling.Ignore;

     using (StreamWriter sw = new StreamWriter(@"C:\Users\source\repos\ConsoleApp1\Grades.Data\bin\Debug\StudentsGrades.JSON"))
     {
        using (JsonWriter writer = new JsonTextWriter(sw))
        {
             writer.Formatting = Formatting.Indented;
             serializer.Serialize(writer, studentsgrades);
             writer.Close();
             sw.Close();
         }
     }
}

public static void LoadJson()
{
   //loading students grades
 if (File.Exists(@"C:\Users\source\repos\ConsoleApp1\Grades.Data\bin\Debug\StudentsGrades.JSON"))
 {
    using (StreamReader r = new StreamReader(@"C:\Users\source\repos\ConsoleApp1\Grades.Data\bin\Debug\StudentsGrades.JSON"))
       {
         string json = r.ReadToEnd();
         ClassOfStudents.Students = JsonConvert.DeserializeObject<List<Student>>(json);
         r.Close();
        }
  }
  else
  {              
  File.Create(@"C:\Users\source\repos\ConsoleApp1\Grades.Data\bin\Debug\StudentsGrades.JSON");
   }
  }

ClassOfStudents class如下:

public class ClassOfStudents
    {
        public List<Student> Students = new List<Student>();

        public List<Subject> Subjects = new List<Subject>();

        public void AddSubject(Subject subjectName)
        {
            Subjects.Add(subjectName);
        }
        public void AddStudent(Student studentName)
        {
            Students.Add(studentName);
        }
    }

主题class如下:

public class Subject
    {
        public string SubjectName { get; set; }
        public Guid SubjectId { get; set; }

        public int MaxMarkAvail;

    }

在我的 program.cs 中,我已经初始化 classofstudents 如下:

public static ClassOfStudents ClassOfStudents = new ClassOfStudents();

当我想查看我的主题时,调用此方法:

 public static void ViewSubjectsPool()
        {
            Console.Write(Line);
            Console.WriteLine("\nPlease find updated subjects pool below");
            Console.Write(Line + "\n");
            foreach (var subjectname in ClassOfStudents.Subjects)
            {
                Console.WriteLine("Subject Id: " + subjectname.SubjectId + "| Subject Name: " + subjectname.SubjectName + "| Max Available Mark = " + subjectname.MaxMarkAvail);
            }
            Console.Write(Line + "\n\n");
        }

谢谢

虽然没有多少信息可以告诉您,但这里有用的是您可以通过故障排除来解决这个问题。更重要的是,对您的代码进行故障排除是一项需要时间开发的 skill/art,因此这对您来说是一个绝佳的机会。

我会把它分成几个练习,因为你不确定错误在哪里。

  1. 测试你的加载方法 - 确保你有一个有效的 JSON 文件(从你工作的时候开始)存储在该路径中,在你的加载方法上设置一个断点,然后步骤通过这。一旦你这样做了,你就会知道文件是否加载失败(一个失败点,例如 UAC 不允许你访问),如果可行,你的原始 json 看起来是否如你所期望的那样(在 VS IDE 你可以将鼠标悬停在它上面或使用直接 window。如果没问题,你的反序列化方法 return 是预期的对象结构吗?

  2. 测试您的保存方法。添加断点,用实际结果调用保存,知道预期结果。然后,当您逐步执行代码时,您可以找到失败的语句,并将您的故障排除工作集中在那里。

另外,添加一些 try/catch 语句(我不知道你现在有什么样的错误处理)(至少)会捕获错误并将其写入控制台。这样,如果您以后在这里遇到错误,您就会知道去哪里找。