在 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 将结果转换为您想要的任何格式。
我收到的 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 将结果转换为您想要的任何格式。