我有下面的课程结构,
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" } }
};
我想使用JSON
用Newtonsoft.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"
}
}
]
但是我想要下面的输出(没有大小,只有一个根元素学生),
{
"Student": [
{
"Id": 1,
"Name": "N1"
},
{
"Id": 2,
"Name": "N2"
}
]
}
这里需要做什么?谢谢!
答案 0 :(得分:3)
您需要优化数据以获得理想的结果
第一
var refindedResult = new { Students = messages.Select(m => m.Student) };
第二次将其传递给json转换器
using (var f = File.CreateText("C:\\Temp\\test.json"))
{
f.Write(JsonConvert.SerializeObject(refindedResult ));
}
答案 1 :(得分:1)
//f.Write(JsonConvert.SerializeObject(messages));
f.Write(JsonConvert.SerializeObject(messages.Select(m => m.Student)));
或者,当您需要根对象(学生 s ,而不是学生)
时 f.Write(JsonConvert.SerializeObject(
new { Students = messages.Select(m => m.Student) } ));
答案 2 :(得分:1)
您可以尝试编写StudentModel
类。
public class StudentModel
{
public IEnumerable<Student> Student { get; set; }
}
使用linq从messages
获取学生收藏,然后在SerializeObject
上收藏。
var res = new StudentModel()
{
Student = messages.Select(x => x.Student)
};
var json = JsonConvert.SerializeObject(res);