需要有关所需JSON输出的帮助

时间:2019-02-22 10:27:48

标签: c# json.net

我有下面的课程结构,

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" } }
            };

我想使用JSONNewtonsoft.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"
    }
  ]
}

这里需要做什么?谢谢!

3 个答案:

答案 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);