2

我的 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.

谁能帮我弄清楚这有什么问题?

4

3 回答 3

1

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

删除方括号,以便您留下:

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

这应该反序列化为Dictionary<string, object>.

编辑(基于下面的评论)

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

"{
    "51851" : { "id" : "51851", "name" : "test" },
    "527" : { "id" : "527", "name" : "test" }
}"
于 2013-07-17T23:24:25.903 回答
0

尝试这个。而不是object用于dynamic整数。

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

正如奥利弗所说,删除方括号。它用于数组。

于 2013-07-17T23:24:04.510 回答
0

您的 JSON 表示对象数组,而不是字典。

如果您的 JSON 不正确(您不打算使用数组),您可以删除方括号,您的代码应该可以工作。

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

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

foreach (var dictionary in dictionaries)
{
    Console.WriteLine(dictionary["id"]); // 518523721
}
于 2013-07-17T23:29:02.350 回答