我正在使用JSON.Net将数据从我的c#程序转换为使用JSON.NET的JSON格式。我想知道在序列化为json时是否可以使用在c#程序中使用的方法?
背景上下文的一部分:
存在一个类Students
,该类具有属性String StudentName
,Guid StudentId
和Dictionary<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()
,但显示错误。
关于如何仅打印学生姓名的任何帮助吗?
谢谢
答案 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
中创建新的匿名对象:如果需要,您可以像原始示例一样设置字符串格式。