首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Json反序列化为C#集合

将Json反序列化为C#集合
EN

Stack Overflow用户
提问于 2017-07-12 20:27:39
回答 1查看 4.8K关注 0票数 1

我希望将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“}

代码:

代码语言:javascript
复制
 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; }
}
EN

回答 1

Stack Overflow用户

发布于 2017-07-12 20:31:09

您显示的JSON是一个对象,它有一个名为Houses的属性,它包含您的数组。注意外部Json是如何被{ }而不是[ ]包围的,这就是为什么您会看到这个错误。如果要反序列化为House列表,则只需选择该属性的值。您可以使用JObject来完成这个任务,然后具体地选择豪斯属性。

代码语言:javascript
复制
var jobj = JObject.Parse(jSon);
var houses = JsonConvert.DeserializeObject<List<House>>(jobj["Houses"].ToString());

或者,你也可以:

代码语言:javascript
复制
var houses = JObject.Parse(jSon)["Houses"].ToObject<List<House>>();

如果您想在不使用JObject的情况下一步映射它,就必须有另一个类包装您的House列表并直接映射到您显示的JSON。

代码语言:javascript
复制
public class HouseList
{
    public List<House> Houses {get; set;}
}

如果你能做这个对象

代码语言:javascript
复制
var houses = JsonConvert.DeserializeObject<HouseList>(jSon).Houses;
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45066930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档