【发布时间】:2018-09-18 14:27:55
【问题描述】:
早安,
我正在尝试反序列化我的 api 中的列表,但问题是,api 有一个对象。
我的 API 结果如下所示:
{
result:[
{
"name": "Jessica"
},
{
"name": "May"
},
{
"name": "Joseph"
}]
}
这是我的反序列化代码,它失败了,因为result 导致我没有从 api 获取列表。
var httpClient = new HttpClient();
var task = await httpClient.GetStringAsync("http://something.com/api/whatever");
return JsonConvert.DeserializeObject<List<Whatever>>(task);
我的Whatever.cs 看起来像这样
public class Whatever {
public string Name {get;set;}
}
有没有办法像我删除结果以便能够将其反序列化为列表,或者 Newtonsoft.JSON 是否提供了任何选项来修剪 result 并使其成为列表而不是对象?
提前谢谢你
【问题讨论】:
-
你的 Json 不是一个列表,它是一个具有一个名为“result”的属性的对象,它是一个列表。所以让你的班级代表这一点,你会是金色的
-
最好的选择是实际创建额外的类,它更清晰,而且周围的错误空间更小。但是,如果您绝对不想要该课程,您可以向 Json.Net 寻求帮助。试试这个:
JObject.Parse(task)["result"].ToObject<List<Whatever>>() -
是的@maccettura 我知道。这不是一个清单。这就是为什么我在反序列化时遇到错误,因为
result -
@jsonGPPD 好的,按照我说的去做,你很好。
-
不,抱歉,我不会那样做。正确的方法仍然是创建该类,因此我不会发布详细说明如何以 hackish 方式进行操作的答案。
标签: c# asp.net-web-api json.net httpclient