首页 > 解决方案 > 如何从json字符串c#Newtonsoft.json中获取对象列表

问题描述

我正在尝试将 JSON 字符串转换为对象列表,但出现错误

无法将当前 JSON 对象反序列化为 List 类型,因为该类型需要 JSON 数组才能正确反序列化。

我检索json,它看起来像这样

{
    "Code":0,
    "Message":"OK",
    "Data":
    {
        "Houses":
        [
            {
                "Id":1,
                "Name":"House 1",
                "Area":"22.00",
                "ShortName":"H1",
                "FarmName":"Farm 1"
            },
            {
                "Id":2,
                "Name":"Farmi1 - House 1",
                "Area":"1000.00",
                "ShortName":"H1",
                "FarmName":"Farm 1"
            }
        ]
    }
}

然后我说

List<House> Houses = JsonConvert.DeserializeObject<List<House>>(json); 

标签: c#jsonjson.net

解决方案


你得到的 JSON 字符串不是一个列表,而是一个在嵌套级别上有一个列表的对象。您必须反序列化最外层的结构,然后获取相应的嵌套属性。

您可以定义一个代表数据完整结构的整个类,或者,如果您只对房屋列表感兴趣,只需使用 JObjects

var o = JsonConvert.DeserializeObject<JObject>(json);
var h = o.Value<JObject>("Data")
    .Value<JArray>("Houses")
    .ToObject<List<Houses>>();

推荐阅读