我正在使用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(),但是显示错误。

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

谢谢

最佳答案

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

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


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

serializer.Serialize(writer, studentsWithNamesOnly);


这将产生如下内容:

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


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

关于c# - 序列化为JSON时可以使用C#方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52643254/

10-11 22:27
查看更多