首页 > 解决方案 > 如何 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、用户名、名字和姓氏。

有没有很好的推荐方法来实现这一目标?

标签: c#jsonapiasp.net-corejson-deserialization

解决方案


只需添加另一个代表模型的类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;

推荐阅读