我从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对象(例如{&#34; name&#34;:&#34; value&#34;}) into type&#39; System.Collections.Generic.List`1 [Entities.Users]&#39; 因为该类型需要一个JSON数组(例如[1,2,3])来反序列化 正确。
我在哪里做错了?
答案 0 :(得分:3)
以下是JSON对象;在您的情况下,User
{ ... }
以下是JSON数组;在你的情况下是一个User
[ { ... }, { ... } ]
因此,如果你想将你进入用户数组的JSON反序列化,这是不可能的,因为你没有JSON中的数组。
因此,反序列化的正确代码是:
JsonConvert.DeserializeObject<Users>(content);
此外,您的映射是错误的,因为在JSON中有一个属性AddressList1
,在类中它被称为addressList1
答案 1 :(得分:1)
鉴于您的JSON,您需要一个包含项目成员和分页成员的POCO对象。
JsonConvert.DeserializeObject<Users>(content);
应该有用。
答案 2 :(得分:1)
您的Json字符串格式正确,实体也符合Json2Csharp的要求。
但问题在于JsonConvert.DeserializeObject<List<Users>>(content);
你所拥有的所有json只有 ONE 用户,并且你正在尝试获取它们的列表,有问题,
您可以尝试使用:
JsonConvert.DeserializeObject<Users>(content);
答案 3 :(得分:1)
尝试以下代码
JsonConvert.DeserializeObject<Users>(content);
答案 4 :(得分:0)
您的实体(型号)看起来很好。如果您正在使用或者使用ASP.NET Web API 2,并且您的客户端正在使用http谓词帖子,则此设置将起作用,因为Web API负责对象反序列化:
public HttpStatusCode Post(Item item)
{
Debug.Write(item.toString());
return HttpStatusCode.OK;
}
如果您坚持手动反序列化,请使用允许您执行以下操作的JavaScriptSerializer library:
Item item = new JavaScriptSerializer().Deserialize<Item>(content);
请注意,.Deserialize<T>()
采用通用的,在您的情况下为Item
。
希望有所帮助。