【发布时间】: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