进行GET HTTP调用时Json格式化错误消息
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进行GET HTTP调用时Json格式化错误消息相关的知识,希望对你有一定的参考价值。
我正在尝试从我们的软件返回用户列表,并将这些用户的姓名和电子邮件地址格式化为一个列表,以便将其与其他列表进行比较,并确定哪些更准确。我正在使用下面的代码提出请求。
问题:如何将我的代码格式化为接受json数组,如错误消息所述?
public void MakeCall()
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(Url);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = client.GetAsync(_urlParameters).Result;
if (response.IsSuccessStatusCode)
{
var dataObjects = response.Content.ReadAsAsync<IEnumerable<WorkfrontDataObjects>>().Result;
foreach (var workfrontData in dataObjects)
{
Console.WriteLine("{0}", workfrontData.Email);
}
}
Console.ReadLine();
}
public class WorkfrontDataObjects
{
public string[] Email { get; set; }
public string[] Name { get; set; }
public WorkfrontDataObjects()
{
}
}
错误信息:
JsonSerializationException:无法将当前JSON对象(例如{“name”:“value”})反序列化为类型'System.Collections.Generic.IEnumerable`1 [ManageWorkfrontADUserDistros.WorkfrontDataObjects]',因为该类型需要JSON数组(例如[1, 2,3])正确反序列化。要修复此错误,请将JSON更改为JSON数组(例如[1,2,3])或更改反序列化类型,使其成为普通的.NET类型(例如,不是像整数这样的基本类型,而不是类似的集合类型可以从JSON对象反序列化的数组或List。 JsonObjectAttribute也可以添加到类型中以强制它从JSON对象反序列化。路径'数据',第1行,第8位。
更新,添加json:
{
"data": [
{
"ID": "000000000000000000000000000000",
"name": "name",
"objCode": "USER",
"emailAddr": "email"
},
{
"ID": "000000000000000000000000000000",
"name": "name",
"objCode": "USER",
"emailAddr": "email"
},
上面有2500条显然有真实的数据
鉴于您的JSON,您的模型需要如下所示:
public class RootObject
{
[JsonProperty("data")]
public List<Item> Data { get; set; }
}
public class Item
{
[JsonProperty("ID")]
public string ID { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("objCode")]
public string ObjCode { get; set; }
[JsonProperty("emailAddr")]
public string Email { get; set; }
}
只要[JsonProperty]
属性中的名称与JSON匹配,您就可以重命名类和属性以满足您的需要,而不会影响反序列化。
那么你应该能够收到这样的数据:
if (response.IsSuccessStatusCode)
{
var rootObject = response.Content.ReadAsAsync<RootObject>().Result;
foreach (var item in rootObject.Data)
{
Console.WriteLine(item.Email);
}
}
你的string[]
应该是WorkfrontDataObjects中的string
,电子邮件应该是emailAddr
以上是关于进行GET HTTP调用时Json格式化错误消息的主要内容,如果未能解决你的问题,请参考以下文章
使用body.json()解析来自http.get()的响应时出错
嵌套 JQuery/json 调用时出现 GET 错误:更新
Angular 5 管理带有 blob 响应和 json 错误的 http get
Feign调用异常org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET(代