gpt4 book ai didi

c# - 在 JsonDeserializer 中正确跳过父级

转载 作者:行者123 更新时间:2023-12-04 08:17:05 25 4
gpt4 key购买 nike

我收到的 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 StackOverflow
{
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 将结果转换为您想要的每种格式。

关于c# - 在 JsonDeserializer 中正确跳过父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65659445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com