在 JsonDeserializer 中正确跳过父项

Skipping parent properly in JsonDeserializer

我收到的 HttpResponseMessage 看起来像这样(数据已编辑):

{
  "tracks" : {
    "href" : "{href_here}",
    "items" : [ {
      "album" : {
        //stuff here
      },
      "name": "{name here}"
    },
    {
      "album" : {
        //more stuff here
      },
      "name": "{other name here}"
    }
  }
}

我的模型是这样的:

using System.Text.Json.Serialization;

namespace ProjectName.Models
{
    public class Track
    {
        [JsonPropertyName("album")]
        public Album Album { get; set; }
        
        [JsonPropertyName("name")]
        public string Name { get; set; }
    }
}

然后我尝试像这样反序列化响应:

var response = await _httpClient.GetAsync("URL HERE");

response.EnsureSuccessStatusCode();

return JsonSerializer.Deserialize<IEnumerable<Track>>(await response.Content.ReadAsStringAsync());

我想检索曲目列表(对应于 JSON 中的 items)。

我无法在线找到“跳过”父属性并仅反序列化特定子属性的方法(在本例中为 items)。我不需要 href(以及我已删除的其他属性)。

有办法吗?

using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json.Serialization;

namespace Whosebug
{
    public class Album
    {
    }

    public class Item
    {
        [JsonPropertyName("album")]
        public Album Album { get; set; }
        [JsonPropertyName("name")]
        public string Name { get; set; }
    }

    public class Tracks
    {
        [JsonPropertyName("href")]
        public string Href { get; set; }
        [JsonPropertyName("items")]
        public List<Item> Items { get; set; }
    }

    public class Root
    {
        [JsonPropertyName("tracks")]
        public Tracks Tracks { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var jsonStr = "{\"tracks\":{\"href\":\"{href_here}\", \"items\" : [{\"album\" : { }, \"name\": \"{name here}\"}]}}";

            var root = JsonSerializer.Deserialize<Root>(jsonStr);

           //Here is your "IEnumerable<Track>"
            var items = root.Tracks.Items;
        }
    }
}

您的模型必须具有这样的结构,然后它会按预期反序列化您的数据。然后您可以使用 Linq 将结果转换为您想要的任何格式。