C#反序列化单个对象中的两个Jarray对象
我有一个以以下格式返回响应的外部API:C#反序列化单个对象中的两个Jarray对象,c#,json,json.net,C#,Json,Json.net,我有一个以以下格式返回响应的外部API: { "responses": [ { "columnHeadersCount": 1, "data": [ [ "1", "John",
{
"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);
}