簡體   English   中英

將Json反序列化為C#集合

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM