C# JSON.NET数组转换

C# JSON.NET数组转换,c#,json,json.net,C#,Json,Json.net,我正在尝试将JSON数组转换为C#字典。 我的Box类具有“id”和“color”属性 { "boxes" [ {"id":0, "color":"red"}, {"id":1, "color":"green"}, {"id":2, "color":"blue"} ] } 我试过一些方法,但还没有成功 List<Box> jsonResponse = JsonConvert.DeserializeObject<List&l

我正在尝试将JSON数组转换为C#字典。 我的Box类具有“id”和“color”属性

{
   "boxes" [
       {"id":0, "color":"red"},
       {"id":1, "color":"green"},
       {"id":2, "color":"blue"}
   ]
}
我试过一些方法,但还没有成功

List<Box> jsonResponse = JsonConvert.DeserializeObject<List<Box>>(File.ReadAllText(filePath));
List jsonResponse=JsonConvert.DeserializeObject(File.ReadAllText(filePath));

JSON在顶层不需要{},因此您只需将{}中的项目列表用[]包围即可

[
    {"id":0, "color":"red"},
    {"id":1, "color":"green"},
    {"id":2, "color":"blue"}
]

问题是你的字典是嵌套的。 更重要的是,它不是一本真正的字典。它是一个对象数组,其中每个对象由两个字段组成-
id
color
(而在字典中,我们有键值对)

您可以将json反序列化为具有正确结构的匿名对象,然后从中获取框数组并将其转换为字典:

var box = new { id = 0, name = "" };
var jsonObj = new { boxes = new[] { box } };

var dict = JsonConvert.DeserializeAnonymousType(myJson, jsonObj).boxes
                                 .ToDictionary(b => b.id, b => b.name);

如果只执行
JsonConvert.DeserializeObject(框)
,它对您有效吗?这在语法上是无效的<代码>{“框”:[…]}应该是正确的。好的观点@Jeroenmoster,编辑。这是我正在使用的一个精简版本,我错过了这一部分。@Fabjan“若要修复此错误,请将JSON更改为JSON对象(例如{“name”:“value”}),或将反序列化类型更改为数组或实现集合接口(例如ICollection、IList)的类型,如可以从JSON数组反序列化的列表。”我决定为list->dictionary添加一个函数。@idos我已经根据您使用的场景更新了我的答案