2013-07-17 3 views
2

json 구조를 사전으로 변환해야하는 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. 

누구에게이 문제가 무엇인지 알아낼 수 있습니까?

+1

사전 대신 객체 배열을 반환하지 않겠습니까? – Matthew

+0

제목에 태그 정보를 넣지 마십시오. 태그 지정 시스템은 일을 분류하는 데 매우 효과적이며 도움이 필요하지 않습니다. :-) [제목에 "태그"를 포함해야합니까?] (http://meta.stackexchange.com/q/19190/172661)를 참조하십시오. 감사. –

+0

Matthew이 맞습니다. 배열을 사전에 역 직렬화하려고합니다. 이 답변을 참조하십시오 : http://stackoverflow.com/questions/6692821/dictionary-is-not-supported-for-deserialization-of-an-array – nickles80

답변

1

여기 : "[{""id"":""518523721""}]"은 개체의 배열입니다.

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

이 다음 Dictionary<string, object>에 탈 직렬화한다 : 당신이 왼쪽되도록

는 대괄호를 제거합니다. (아래의 의견에 따라)

편집 여러 들어

객체은 JSON이 올바르지 않습니다. 다음 JSON 구조가 필요에 따라 비 직렬화되어야합니다.

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

이 작동합니다. 문자열 json = @ "" "id" ":" "51851" ","name "": ""test { ""id "": ""527 "", ""name " "test1" "}" "; – user1357872

+0

안녕하세요, 여전히 가능합니다. JSON을 변경해야합니다. 내 편집을 참조하십시오. – Oliver

+0

감사합니다 .. 작품 .. – user1357872

0

시도해보십시오. object 대신 정수로 dynamic을 사용하십시오.

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

또한 올리버가 언급 한대로 대괄호를 제거하십시오. 배열에 사용됩니다.

+0

메신저 .net 3.5를 사용하여 동적 어디에 지원되지 않습니다. – user1357872

+0

@ user1357872 아 맞아요. 대괄호를 제거하면됩니다. 그게 작동하는지 알려주세요. –

+0

제이 파텔. 대괄호를 제거하면 잘못된 JSON 기본 오류가 발생합니다. – user1357872

0

JSON은 사전이 아닌 개체 배열을 나타냅니다.

JSON이 올바르지 않은 경우 (배열을 사용하지 않으려는 경우) 대괄호를 제거하면 코드가 작동합니다.

그렇지 않으면 코드를 비 직렬화로 변경합니다.

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

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