2010-05-18 8 views

답변

37
DataContractJsonSerializer serializer = 
    new DataContractJsonSerializer(typeof(YourObjectType)); 

YourObjectType yourObject = (YourObjectType)serializer.ReadObject(jsonStream); 

당신은 또한 JavaScriptSerializer를 사용할 수 있지만 DataContractJsonSerializer 가정으로 복잡한을보다 잘 처리 할 수있다 유형.

충분히 이상한 JavaScriptSerializer는 3.5에서 사라졌고 ASP.NET MVC (3.5 SP1)로 인해 부활되었습니다. 그건 분명히 내 자신감을 떨쳐 버리고 WCF를 위해 하드 베이킹 된 이후로 DataContractJsonSerializer을 사용하기에 충분할 것입니다.

+0

이전 버전의 프레임 워크에서 작성된 serializer를 사용하면됩니다. – Will

+5

먼저 this에 대한 참조를 추가해야합니다. 'using System.Runtime.Serialization.Json;' – ppumkin

18

이 당신이 원하는 무엇인가 :

JavaScriptSerializer JSS = new JavaScriptSerializer(); 
T obj = JSS.Deserialize<T>(String); 
+3

이것을 보려면 'System.Web.Extensions'에 대한 참조를 추가해야했습니다. –

+0

T는 특정 유형이어야합니다. 그렇지 않습니까? 난 그냥 임의의 JSON 문자열을 구문 분석 할 수 없습니다. –

61

Json.NET 라이브러리를 사용하면됩니다. 그것은 당신이 아주 쉽게 JSON 형식 문자열을 구문 분석 할 수 있습니다 :

JObject o = JObject.Parse(@" 
{ 
    ""something"":""value"", 
    ""jagged"": 
    { 
     ""someother"":""value2"" 
    } 
}"); 

string something = (string)o["something"]; 

문서 : Parsing JSON Object using JObject.Parse

+0

Json.NET은 테스트를 거쳐 매우 유연하고 효율적인 것으로 입증 된 전문 라이브러리입니다. 추천. – Zyo

+2

내가 알 수있는 한, 이것은 일반적인 객체 유형 구문 분석을 허용하는 유일한 옵션이며 다른 대답은 특정 객체 유형에 바인딩됩니다. –

+0

훌륭한 솔루션입니다. 비록 나를 위해 일해도 JToken something = o [ "something"]; ' – Edgar

2

가 나는 XML 문서에 JSON 응답을 변형 할 수 Json.NET 라이브러리, 에코 것입니다. XML 문서를 사용하면 XPath로 쉽게 쿼리하고 필요한 데이터를 추출 할 수 있습니다. 나는 이것을 매우 유용하다고 생각한다.

5

정확하게 알고있는 경우를 대비하여 JSON 키를 나타내는 구조를 만든 다음 구조에 JSON 문자열을 쉽게 deserialize 할 수 있습니다. 내 examle에서 나는 Google 클라우드 메시지 서버의 응답 직렬화 복원했습니다

class templateResponse 
{ 
    public String multicast_id; 
    public String success; 
    public String failure; 
    public String canonical_ids; 
    public Result[] results; 

    public class Result 
    { 
     public String message_id; 
     public String registration_id; 
     public String error; 
    }; 
} 

들어오는 JSON 것은이었다

"\"multicast_id\":7400896764380883211,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1351777805148960%39895cf0f9fd7ecd\"}]}" 

그래서,

templateResponse result = new JavaScriptSerializer().Deserialize<templateResponse>(json); 

를 사용하면 result 객체를 직렬화 복원 얻을 것이다

+0

예제 JSON 및 관련 클래스가 도움이되었습니다. 감사합니다. – Porco

관련 문제