我在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.
任何人都可以帮我弄清楚这有什么不对吗?
答案 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
}