我希望将json反序列化为C#对象的集合,但得到以下错误:
{“无法反序列化当前JSON对象(例如,{\”name\“:\”值“})为'System.Collections.Generic.List`1‘类型,因为该类型需要一个JSON数组(例如,1,2,3)反序列化。\r\n要修复此错误,可以将JSON更改为JSON数组(例如,1,2,3),或者将反序列化类型更改为正常的.NET类型(例如,不像整数这样的原始类型,而不是可以从JSON对象反序列化的集合类型,如数组或列表)。还可以将JsonObjectAttribute添加到类型中,以强制它从JSON对象反序列化。\r\nPath 'organizations',第1行,位置17“}
代码:
var jSon = "{\"Houses\":[{\"id\":\"123\",\"doorNumber\":22},
{\"id\":\"456\",\"deniNumber\":99}
]}";
var temp = JsonConvert.DeserializeObject<List<House>>(jSon);
}
public class House
{
public int Id { get; set; }
public int DoorNumber { get; set; }
}发布于 2017-07-12 20:31:09
您显示的JSON是一个对象,它有一个名为Houses的属性,它包含您的数组。注意外部Json是如何被{ }而不是[ ]包围的,这就是为什么您会看到这个错误。如果要反序列化为House列表,则只需选择该属性的值。您可以使用JObject来完成这个任务,然后具体地选择豪斯属性。
var jobj = JObject.Parse(jSon);
var houses = JsonConvert.DeserializeObject<List<House>>(jobj["Houses"].ToString());或者,你也可以:
var houses = JObject.Parse(jSon)["Houses"].ToObject<List<House>>();如果您想在不使用JObject的情况下一步映射它,就必须有另一个类包装您的House列表并直接映射到您显示的JSON。
public class HouseList
{
public List<House> Houses {get; set;}
}如果你能做这个对象
var houses = JsonConvert.DeserializeObject<HouseList>(jSon).Houses;https://stackoverflow.com/questions/45066930
复制相似问题