JSON字符串到字典对象错误

时间:2013-07-17 23:20:18

标签: c#

我在C#程序中有以下代码,我需要将json结构转换为字典。

string json = @"[{""id"":""51851"",""name"":""test {""id"":""527"",""name"":""test1""}]"; 
    var json_serializer = new JavaScriptSerializer();
    Dictionary<string, object> dictionary = json_serializer.Deserialize<Dictionary<string, object>>(json);
运行此操作时,我收到以下错误。

Type 'System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' is not supported for deserialization of an array.

任何人都可以帮我弄清楚这有什么不对吗?

3 个答案:

答案 0 :(得分:1)

这:"[{""id"":""518523721""}]"是一个对象数组。

删除方括号,以便留下:

"{""id"":""518523721""}"

然后应该反序列化为Dictionary<string, object>

编辑(根据以下评论)

对于多个对象,JSON不正确。以下JSON结构应根据需要反序列化:

"{
    "51851" : { "id" : "51851", "name" : "test" },
    "527" : { "id" : "527", "name" : "test" }
}"

答案 1 :(得分:0)

试试这个。而不是object使用dynamic表示整数。

Dictionary<string, dynamic> dictionary = json_serializer.Deserialize<Dictionary<string, dynamic>>(json)

同样如Oliver所述,取下方括号。它用于数组。

答案 2 :(得分:0)

您的JSON代表一个对象数组,而不是字典。

如果你的JSON不正确(你没有打算在数组上),你可以删除方括号,你的代码应该可以工作。

否则,您将代码更改为您要反序列化的内容。

var dictionaries = json_serializer.Deserialize<List<Dictionary<string, object>>>(json);

foreach (var dictionary in dictionaries)
{
    Console.WriteLine(dictionary["id"]); // 518523721
}