【发布时间】:2017-12-21 22:05:32
【问题描述】:
我正在尝试从我们的软件返回一个用户列表,并将这些用户的姓名和电子邮件地址格式化为一个列表,以便可以将其与其他列表进行比较并确定哪个更准确。我正在使用下面的代码发出请求。
问题:如何格式化我的代码以接受 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 反序列化的数组或列表等类型 目的。 JsonObjectAttribute 也可以添加到类型中来强制它 从 JSON 对象反序列化。路径“数据”,第 1 行,位置 8。
更新,添加json:
{
"data": [
{
"ID": "000000000000000000000000000000",
"name": "name",
"objCode": "USER",
"emailAddr": "email"
},
{
"ID": "000000000000000000000000000000",
"name": "name",
"objCode": "USER",
"emailAddr": "email"
},
以上 2500 条明显真实的数据
【问题讨论】:
-
感谢您的编辑@douvillema。如果黄色框中的错误消息,您能告诉我我需要输入什么命令吗?我从来没有这样做过?
-
其实错误说的正好相反。您显然收到了一个 JSON 对象(用大括号
{}表示),但您正试图将其反序列化为IEnumerable<WorkfrontDataObjects>。您可以编辑您的问题以包含您收到的实际 JSON 吗?如果无法查看您正在处理的数据,很难建议您如何修复代码。 -
@BrianRogers 我添加了一个我应该返回的预期 json 样本。我添加了两个项目,但它们总共是 2500 个。
-
您是否尝试过将一些示例数据序列化到您的对象中以查看它生成的 JSON,它们应该在 JSON 构造方面匹配