C#反序列化单个对象中的两个Jarray对象

C#反序列化单个对象中的两个Jarray对象,c#,json,json.net,C#,Json,Json.net,我有一个以以下格式返回响应的外部API: { "responses": [ { "columnHeadersCount": 1, "data": [ [ "1", "John",

我有一个以以下格式返回响应的外部API:

{
    "responses": [
        {
            "columnHeadersCount": 1,
            "data": [
                [
                    "1",
                    "John",
                    "Smith",
                    "50"
                ],
                [
                    "2",
                    "Liam",
                    "Miller",
                    "10"
                ]               
            ],
            "headerOrientation": "horizontal",
            "headers": [
                [
                    {
                        "displayName": "Id"
                    },
                    {
                        "displayName": "First Name",
                        "field": "FirstNameField"
                    },
                    {
                        "displayName": "Last Name",
                        "field": "LastNameField"
                    },
                    {
                        "displayName": "Age",
                        "field": "AgeField"
                    }
                    
                ]
            ],
            "totalColumnsCount": 4
        }
    ]
}
我有一个类,我希望将API响应反序列化到该类

Student.cs    

public class Student
{

    public int Id { get; set; }

    [JsonProperty("firstName")]
    public string FirstName { get; set; }
    
    [JsonProperty("lastName")]
    public string LastName { get; set; }
    
    public int Age { get; set; }
}
我的问题是,在给定API响应结构的情况下,如何将响应反序列化到此类中

我试图创建一个名为APIResponse.cs的类,并将标题和数据映射到JArray中。目前,我使用以下代码将其反序列化为APIResponse.cs:

var jsonResponse= 反序列化对象(json.ToString())

所以我希望我的头和数据在Student对象中被反序列化。 有什么想法吗?谢谢你的帮助


谢谢大家!

要实现这一点,您必须遵循以下步骤:

1-创建以下类以反序列化对象中的数据

public class MainClass
{
    public List<Response> Responses { get; set; }
}

public class Response
{
    public long ColumnHeadersCount { get; set; }
    public List<List<string>> Data { get; set; }
    public string HeaderOrientation { get; set; }
    public List<List<Header>> Headers { get; set; }
    public long TotalColumnsCount { get; set; }
}

public class Header
{
    public string DisplayName { get; set; }
    public string Field { get; set; }
}
更新的答案

4-获取学生类型列表中的学生集合数据:

List<Student> student = new List<Student>();
foreach(var item in studentCollection)
{
    var std = new Student()
    {
        Id = int.Parse(item[0]),
        FirstName = item[1],
        LastName = item[2],
        Age = int.Parse(item[3])
    };
    student.Add(std);
}
List student=newlist();
foreach(studentCollection中的变量项)
{
var std=新学生()
{
Id=int.Parse(项[0]),
FirstName=项目[1],
LastName=项目[2],
年龄=int.Parse(项目[3])
};
添加(std);
}

Json看起来很简单。你能粘贴真实的有效载荷吗?谢谢。而且这不是一个有效的C#类。专业提示:尽量不要让人们更加努力工作,因为需要阅读、测试并为您提供解决方案给定的JSon数据格式不正确。提供正确的Jsondata@TheGeneral我已经更新了上面的JSON。thanks@Imran谢谢,我的错,我首先提供了正确的JSON,不要这样做:
[JsonProperty(“First Name”)]
——这不是一个有效的JSON属性名称。应该是
[JsonProperty(“firstName”)]
谢谢@Imran这很有帮助!我可以把学生收藏列为清单吗?我的意思是如何将其反序列化到我的Student.cs,因为集合没有JSONPropertyName。它不能直接在学生类型列表中反序列化,但在获取
studentCollection
后,通过它循环以获取学生类型集合。请检查我将要更新的答案。是的,谢谢,如果我在studentCollection上循环,我看到的唯一警告是当我有大于5000项的大型数据集时。是的,对于大型数据集,它可能会很昂贵,但由于接收Json格式,您必须承担。
var deserializedObj = JsonConvert.DeserializeObject<MainClass>(YourJsonString);
var studentCollection = deserializedObj.Responses[0].Data;
List<Student> student = new List<Student>();
foreach(var item in studentCollection)
{
    var std = new Student()
    {
        Id = int.Parse(item[0]),
        FirstName = item[1],
        LastName = item[2],
        Age = int.Parse(item[3])
    };
    student.Add(std);
}