序列化为JSON

时间:2018-10-04 09:21:03

标签: c# json

我正在使用JSON.Net将数据从我的c#程序转换为使用JSON.NET的JSON格式。我想知道在序列化为json时是否可以使用在c#程序中使用的方法?

背景上下文的一部分:

存在一个类Students,该类具有属性String StudentNameGuid StudentIdDictionary<String, Int> Grades Record,其中主题名称是键,等级是值。

存在另一个具有属性ClassOfStudents的类List<Student> Students

我正在尝试打印所有学生姓名的列表。我已经设法通过以下方法在C#上做到这一点:

public static void ViewStudentsPool()
{
Console.Write(Line);
Console.WriteLine("\nPlease find updated students pool below");
Console.Write(Line + "\n");
foreach (var studentname in ClassOfStudents.Students)
  {
     Console.WriteLine("Student Id: " + studentname.StudentId + "| Student Name: " + studentname.StudentName);
  }
Console.Write(Line + "\n\n");
}

我想知道序列化为JSON时是否可以使用此方法。

我目前有以下内容,它打印出我不需要的学生的所有属性,我只想打印出他们的姓名。

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

using (StreamWriter sw = new StreamWriter(@"c:\Students.txt"))
using (JsonWriter writer = new JsonTextWriter(sw))
{
   writer.Formatting = Formatting.Indented;
   serializer.Serialize(writer, ClassOfStudents.Students );
}

我尝试将最后一行的ClassOfStudents.Students替换为ViewStudentsPool(),但显示错误。

关于如何仅打印学生姓名的任何帮助吗?

谢谢

1 个答案:

答案 0 :(得分:5)

一种简单的方法是使用LINQ将ClassOfStudents.Students列表映射到您要查找的结构,例如:

var studentsWithNamesOnly = ClassOfStudents.Students
    .Select(x => new { x.StudentName });

您可以获取此输出并序列化那个,而不是原始的ClassOfStudents.Students变量,如下所示:

serializer.Serialize(writer, studentsWithNamesOnly);

这将产生如下内容:

[
    { "StudentName": "Name1" },
    { "StudentName": "Name2" },
    ...
]

您不必像我在此处那样在Select中创建新的匿名对象:如果需要,您可以像原始示例一样设置字符串格式。