c# - 如何 JSON 反序列化子对象 ASP.NET Core
问题描述
我正在尝试反序列化 JSON API 响应,但不确定如何访问子对象的属性。
这是我正在使用的 API 响应的示例:
{
"token_type": "Bearer",
"expires_at": 1598830199,
"expires_in": 21408,
"refresh_token": "*Removed*",
"access_token": "*Removed*",
"athlete": {
"id": *Removed*,
"username": null,
"resource_state": 2,
"firstname": "Jon",
"lastname": "Clyde",
"city": "*Removed*",
"state": "England",
"country": "United Kingdom",
"sex": "M",
"premium": true,
"summit": true,
"created_at": "*Removed*",
"updated_at": "*Removed*",
"badge_type_id": 1,
"profile_medium": "avatar/athlete/medium.png",
"profile": "avatar/athlete/large.png",
"friend": null,
"follower": null
}
}
我已经设法通过创建具有属性 expires_at、expires_in、access_token、refresh_token 的类来访问我需要的根属性,然后使用以下代码行:
using var responseStream = await response.Content.ReadAsStreamAsync();
var stravaResponse = await JsonSerializer.DeserializeAsync<Authorisation>(responseStream);
但是,我需要访问“athelete”子对象下的 id、用户名、名字和姓氏。
有没有很好的推荐方法来实现这一目标?
解决方案
只需添加另一个代表模型的类athlete
,然后将其作为顶级类的属性:
public class Authorisation
{
// Root properties
// Nested athlete object
public Athlete Athlete { get; set; }
}
public class Athlete
{
public string Id { get; set; }
public string Username { get; set; }
// Other properties
}
然后,您可以像往常一样在 C# 中访问这些值:
var athleteId = stravaResponse.Athlete.Id;
推荐阅读
- flutter - 颤振:">=0.2.4 <2.0.0" 当在 pubspec.yaml 中使用 cloud_firestore 包时,发布失败 (65)
- laravel - 在选择查询中比较 json 编码数据时如何获取列?
- angular - Angular 没有通过 ChangeDetectorRef 运行变更检测
- html - 我如何处理 macOS Safari 溢出:隐藏;问题
- c++ - 对移位行为的怀疑
- javascript - 有没有办法解决我在响应式网站上的背景图片的这个小问题?
- excel-formula - 检查在任务上花费的时间的公式,参考允许的最短时间和将延长最小值的变量(如果存在)
- hibernate - Hibernate Criteria 查询没有给出完整的结果
- php - laravel 中的计数函数机制
- pandas - 如何访问 map_paritions 中的 dask 数据帧索引值?