【问题标题】:Not creating and loading .JSON file c# [closed]不创建和加载 .JSON 文件 c# [关闭]
【发布时间】:2019-03-26 06:53:13
【问题描述】:

如果现有的.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 类如下:

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

学科分类如下:

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

谢谢

【问题讨论】:

  • 你得到什么异常?
  • @PatrickHofman 我没有得到任何异常,数据没有加载和保存
  • 当你附加调试器并运行它时,它会执行你的 if 分支和你期望它执行的方法吗?
  • @AdamG 是的,它通过 if 语句
  • 那么上面哪几行没有对您的文件系统产生预期的副作用?

标签: c# json serialization load json-deserialization


【解决方案1】:

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

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

  1. 测试您的加载方法 - 确保您在该路径中存储了一个有效的 JSON 文件(从它工作的时间开始),在您的加载方法上设置一个断点,然后单步执行。一旦你这样做了,你就会知道文件是否加载失败(一个失败点,例如 UAC 不允许你访问),如果这有效,你的原始 json 是否看起来像你期望的那样(在 VS IDE 中你可以悬停在它上面或使用即时窗口。如果没关系,您的反序列化方法是否返回预期的对象结构?

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

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

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    相关资源
    最近更新 更多