问题描述
我正在尝试反序列化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;
,
只需添加到Noah添加的内容中,如果您使用的是Visual Studio(不确定VS Code),则可以使用:
编辑>>选择性粘贴>>将JSON作为类粘贴
在菜单中,它将创建能够反序列化您粘贴的任何(有效)JSON所需的类。一旦有了这个,就可以反序列化使用该类,并像其他任何类一样访问其成员。