我的类结构以下,
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Message
{
public int Size { get; set; } = 10;
public Student Student { get; set; }
}
现在,我有
的消息列表var messages = new List<Message>
{
new Message{ Size=10, Student=new Student{Id=1, Name="N1" } },
new Message{ Size=20, Student=new Student{Id=2, Name="N2" } }
};
我想使用Newtonsoft.Json
,
JSON
中写下 using (var f = File.CreateText("C:\Temp\test.json"))
{
f.Write(JsonConvert.SerializeObject(messages));
}
这给出以下JSON输出,
[
{
"Size": 10,
"Student": {
"Id": 1,
"Name": "N1"
}
},
{
"Size": 20,
"Student": {
"Id": 2,
"Name": "N2"
}
}
]
但是我想在下面的输出(没有大小,只有一次root Element student ),
{
"Student": [
{
"Id": 1,
"Name": "N1"
},
{
"Id": 2,
"Name": "N2"
}
]
}
在这里需要做什么?谢谢!
您需要完善数据才能获得所需的结果
第一个
var refindedResult = new { Students = messages.Select(m => m.Student) };
第二次将其传递给JSON转换器
using (var f = File.CreateText("C:\Temp\test.json"))
{
f.Write(JsonConvert.SerializeObject(refindedResult ));
}
您可以尝试编写StudentModel
类。
public class StudentModel
{
public IEnumerable<Student> Student { get; set; }
}
使用messages
的Linq Get学生收集,然后在其上进行SerializeObject
。
var res = new StudentModel()
{
Student = messages.Select(x => x.Student)
};
var json = JsonConvert.SerializeObject(res);
//f.Write(JsonConvert.SerializeObject(messages));
f.Write(JsonConvert.SerializeObject(messages.Select(m => m.Student)));
或者,当您想要一个root对象(Student S ,而不是学生)
f.Write(JsonConvert.SerializeObject(
new { Students = messages.Select(m => m.Student) } ));