我从API获取Json数据,我一直在尝试反序列化。
Json 数据:
{
"items": [
{
"id": "1",
"name": "samplename",
"AddressList1": {
"City": "Hyd",
"State": "TN",
"Country": "IN"
},
"Age": "10"
},
{
"id": "2",
"name": "samplename2",
"AddressList1": {
"City": "Hydd",
"State": "TN",
"Country": "IN"
},
"Age": "10"
}
],
"paging": {
"cursors": {}
}
}
实体:
public class AddressList1
{
public string City { get; set; }
public string State { get; set; }
public string Country { get; set; }
}
public class Item
{
public string id { get; set; }
public string name { get; set; }
public AddressList1 addressList1 { get; set; }
public string Age { get; set; }
}
public class Cursors
{
}
public class Paging
{
public Cursors cursors { get; set; }
}
public class Users
{
public List<Item> items { get; set; }
public Paging paging { get; set; }
}
C# 代码:
JsonConvert.DeserializeObject<List<Users>>(content);
错误信息:
无法反序列化当前 JSON 对象(例如 {"名称":"值"}) 类型为"System.Collections.Generic.List"1[Entity.Users]" 因为该类型需要一个 JSON 数组(例如 [1,2,3])来反序列化 正确。
我哪里做错了?
下面是一个 JSON 对象;在您的情况下是一个User
{ ... }
下面是一个 JSON 数组;在您的情况下是一个User
数组
[ { ... }, { ... } ]
因此,如果您想反序列化您进入用户数组的 JSON,这是不可能的,因为您在 JSON 中没有数组。
因此,要反序列化的正确代码是:
JsonConvert.DeserializeObject<Users>(content);
此外,您的映射是错误的,因为在 JSON 中有一个属性AddressList1
,而在类中它被称为addressList1
给定您的 JSON,您将需要一个包含项目成员和分页成员的 POCO 对象。
JsonConvert.DeserializeObject<Users>(content);
应该工作。
你的 Json 字符串格式很好,实体也符合 Json2Csharp 很好。
但是您的问题出在说明JsonConvert.DeserializeObject<List<Users>>(content);
您拥有的所有 JSON 只有一个用户,并且您正在尝试获取它们的列表,这就是问题,
您可以尝试使用:
JsonConvert.DeserializeObject<Users>(content);
尝试以下代码
JsonConvert.DeserializeObject<Users>(content);
您的实体(模型)看起来很好。例如,如果您正在使用或正在使用 Web API 2 ASP.NET 并且您的客户端正在使用 http 动词 post,则此设置将作为 Web API 负责对象反序列化的工作:
public HttpStatusCode Post(Item item)
{
Debug.Write(item.toString());
return HttpStatusCode.OK;
}
如果您坚持手动反序列化,请使用 JavaScriptSerializer 库,它允许您执行以下操作:
Item item = new JavaScriptSerializer().Deserialize<Item>(content);
请注意,.Deserialize<T>()
采用一个泛型,在您的情况下它Item
。
希望有帮助。