c# - C# 在单个对象中反序列化两个 Jarray 对象
问题描述
我有一个以这种格式返回响应的外部 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 的类并将 Headers 和 Data 映射到 JArray。目前,我使用以下代码将其反序列化为 APIResponse.cs:
var jsonResponse = JsonConvert.DeserializeObject(json.ToString());
public class ApiResponse
{
public JArray Data { get; set; }
public JArray Headers { get; set; }
}
所以我希望我的标题和数据在学生对象中反序列化。有什么想法吗?感谢你的帮助。
谢谢!
解决方案
为此,您必须按照以下步骤操作:
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; }
}
2-反序列化您的 Json 字符串,如下所示:
var deserializedObj = JsonConvert.DeserializeObject<MainClass>(YourJsonString);
3-从这里deserializedObj
你可以得到你的学生收藏:
var studentCollection = deserializedObj.Responses[0].Data;
更新的答案
4-获取学生类型列表中的 studentCollection 数据:
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);
}
推荐阅读
- c# - C#锁与多个互斥而不是一个
- javascript - discord.js 用户不包含所有属性
- python - 如何用引号将出现的单词括起来?
- vue.js - 无法更改 vue2editor 中的视频链接输入位置
- javascript - React JS:index.css 1:0 中的错误(模块解析失败:意外令牌 (1:0))
- android - 在 Android Studio 中使用 OkHttp 向 AVS 发送事件 https 请求后,未通过 response.body().string() 获得 downchannelStream 响应
- sql - 使用sqlserver根据时间段获取不同的MO
- mysql - 如何杀死 Mysql Pending 线程?
- c# - 在 WPF 中将枚举绑定到 ComboBox
- input - 稀疏特征之间的差异