如何 JSON 反序列化子对象 ASP.NET 核心

How to JSON deserialize child objects 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
    }
}

我已经设法访问了我需要的根属性,方法是创建一个 class 属性 expires_at、expires_in、access_token、refresh_token 然后使用以下代码行:

using var responseStream = await response.Content.ReadAsStreamAsync();
var stravaResponse = await JsonSerializer.DeserializeAsync<Authorisation>(responseStream);

但是,我需要访问“athelete”的子对象下的 ID、用户名、名字和姓氏。

有推荐的好方法吗?

只需添加另一个 class 代表 athlete 的模型,然后将其设为 top-level class:

的 属性
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 所需的 classes。一旦你有了这个,你就可以使用 class 反序列化并像访问任何其他 class.

一样访问它的成员