我正在使用一个以JSON响应返回的API。我正在尝试使用System.Text.Json将JSON响应反序列化为一个类。我收到了一个JsonException,可以帮助我理解我做错了什么。
我调用API并存储JSON响应:
var response = await client.PostAsJsonAsync(url, responseValue);
string ApiResponse = await response.Content.ReadAsStringAsync();``
下面是控制台WriteLine(ApiResponse)的输出:
{"matches":\[\],"nomatches":\[{"Id":"1111111111"},{"Id":"222222222"},{"Id":"33333333333"}\],"notfound":\[{"Id":"4444444"},{"Id":"5555555555"}\]}
我有以下的类结构:
public class JsonResp
{
public class Rootobject
{
[JsonPropertyName("matches")]
public Match[] Matches { get; set; }
//public List<Match> Matches { get; set; }
[JsonPropertyName("nomatches")]
//public List<Nomatch> Nomatches { get; set; }
public Nomatch[] Nomatches { get; set; }
[JsonPropertyName("notfound")]
public Notfound[] Notfound { get; set; }
//public List<Notfound> Notfound { get; set; }
[JsonPropertyName("id")]
public object id { get; set; }
}
public class Match
{
public string id { get; set; }
}
public class Nomatch
{
public string id { get; set; }
}
public class Notfound
{
public string id { get; set; }
}
}
型
我在努力...
List<Rootobject>? result = JsonSerializer.Deserialize<List<Rootobject>>(ApiResponse);
抛出JsonException:JSON值无法转换为系统.集合.通用.列表“1[测试.模型.响应.JsonResp+根对象]。路径:$|行号:0|行内字节位置:一、
我哪里做错了?
2条答案
按热度按时间iyr7buue1#
图中的JSON表示一个对象,但我们试图将其反序列化为一个对象列表:
它不是一个列表。它是一个对象:
g0czyy6m2#
你必须修改你的API响应json字符串。例如,应该用“]”代替“/]”。你可以使用字符串函数来实现
在此之后,您将反序列化json,但使用Rootobject而不是collection
你也需要修正这些类
恕我直言,如果每个类中只有一个属性ID,那么一个类就足够了,而不是几个。另外,如果添加jsonOptions,可以删除所有JsonPropertyName属性