在所需的JSON输出中需要帮助



我的类结构以下,

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

相关内容

  • 没有找到相关文章

最新更新