[英]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.