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

时间:2018-10-22 08:35:40

标签: c# json serialization load json-deserialization

我正在尝试在程序的开头加载现有的In [550]: print(doc_vocab - set(vec.vocabulary_.keys())) {'morning', 'a', 'great morning', 'stackoverflow this', 'is a', 'is', 'oh hello', 'this', 'this is', 'oh', 'a great', 'great'} 文件(如果它们已经存在),并尝试创建它们(如果不存在)。初次使用它时它正在工作,但是现在我将程序划分为多个层,它已停止工作。谁能看到为什么会这样?

.json

ClassOfStudents类如下:

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");
   }
  }

主题类如下:

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);
        }
    }

在program.cs中,我初始化了以下学生类:

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

当我想查看我的主题时,此方法称为:

public static ClassOfStudents ClassOfStudents = new ClassOfStudents();

谢谢

1 个答案:

答案 0 :(得分:1)

虽然没有什么可以告诉您所提供的信息,但是这里有用的是您可以进行故障排除以找出答案。更重要的是,对代码进行故障排除是一项需要花费时间才能开发的技能/技巧,因此这对您来说是一个绝佳的机会。

由于您不确定错误在哪里,因此我将其分为几个练习。

  1. 测试您的加载方法-确保在该路径中存储了一个有效的JSON文件(从其工作之时开始),在您的加载方法上设置一个断点,然后逐步进行操作。完成后,您将知道文件是否加载失败(一个故障点,例如UAC不允许您访问),如果可以,则原始json的外观是否符合您的期望(在VS IDE中,您可以将鼠标悬停还是可以使用立即窗口。如果可以,您的反序列化方法是否返回预期的对象结构?

  2. 测试您的保存方法。添加一个断点,调用保存实际结果,知道预期结果。然后,当您单步执行代码时,可以找到失败的语句,并集中精力进行故障排除。

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