如何使用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;
,

只需添加到Noah添加的内容中,如果您使用的是Visual Studio(不确定VS Code),则可以使用:

编辑>>选择性粘贴>>将JSON作为类粘贴

在菜单中,它将创建能够反序列化您粘贴的任何(有效)JSON所需的类。一旦有了这个,就可以反序列化使用该类,并像其他任何类一样访问其成员。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...