[英]Deserialize Json into C# Collection
我想反序列化json到C#对象的集合中,但是出现以下错误:
{“无法反序列化当前JSON对象(例如{\\” name \\“:\\” value \\“})为类型'System.Collections.Generic.List`1,因为该类型需要JSON数组(例如[1,2, 3])正确反序列化。\\ r \\ n要解决此错误,请将JSON更改为JSON数组(例如[1,2,3])或更改反序列化的类型,使其成为普通的.NET类型(例如,非可以从JSON对象反序列化的基本类型(例如整数),而不是可以从JSON对象反序列化的集合类型(例如数组或List);也可以将JsonObjectAttribute添加到该类型中,以强制其从JSON对象反序列化。第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; }
}
您显示的JSON是一个具有名为Houses的属性的对象,其中包含您的数组。 请注意,外部Json是如何用{ }
而不是[ ]
包围的,这就是为什么您看到该错误的原因。 如果要反序列化为House列表,则只需选择该属性的值。 您可以使用JObject,然后专门选择Houses属性来实现。
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.