2012-05-01 5 views
3

그래,이 작업에 어려움이 있습니다.Windows Phone 7에서 배열이 포함 된 JSON 객체 구문 분석

내 JSON 내가 인해 다른 JSON에, this tutorial을하려고하지만, 한

{ "names" : [ {"name":"bla"} , {"name":"bla2"} ] } 

처럼, 그것은 작동하지 않았다.

이 방법에 무엇을 넣어야합니까? 내 목록을 포함하거나 직접 JsonObject를 사용하는 "wrap"클래스를 만드는 것이 더 좋은지 잘 모릅니다. 발췌 문장을 제공해 주시겠습니까? 저는 C#에서 좀 새로운 것 같습니다.

void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) 
    { 
     DataContractJsonSerializer ser = null; 
     try 
     { 
      ??? 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 

미리 감사드립니다.

+1

http://json2csharp.com/은 당신의 친구가 될 것입니다. JSON String에 따라 클래스와 멤버를 생성합니다. 그것은 많은 시간을 절약합니다! – Gero

답변

6

json 객체를 매핑하는 클래스. 이런 식으로 뭔가 (내가 정확히 기억 경우) : 이벤트 핸들러에서 다음

/// <summary> 
/// 
/// </summary> 
[DataContract] 
public class Result 
{ 
    /// <summary> 
    /// 
    /// </summary> 
    [DataMember(Name = "name")] 
    public string Name 
    { get; set; } 
} 

/// <summary> 
/// 
/// </summary> 
[DataContract] 
public class Results 
{ 
    /// <summary> 
    /// 
    /// </summary> 
    [DataMember(Name = "names")] 
    public List<Result> Names 
    { get; set; } 
} 

:

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Results)); 
var results = (Results)serializer.ReadObject(SOME OBJECT HOLDING JSON, USUALLY A STREAM); 
+0

-1. OP가 Json.NET을 사용하지 않습니다 –

+0

@Mike_G OP는'DataContractJsonSerializer'도 사용하지 않습니다. 'DataContractJsonSerializer ser = null; 만 보았습니다 ** working 코드 **에 대한 downvote의 유일한 설명입니까? –

+0

네, 작동합니다! 고마워요! 누군가 나 같은 문자열이 필요한 경우 그냥 obj [ "name"] .ToString()을 넣으십시오. 어쩌면 그것은 멍청한 녀석 일지 모르지만, 내가 말했듯이, 나는 C#에 익숙하다. – Enrichman

1

JSON.NET (http://james.newtonking.com/projects/json-net.aspx)을 정상적으로 사용하므로 코드가 약간 다를 수 있습니다. 나는 그런 이름 속성을 가진 클래스에 갈 것 목록 콘텐츠를

:

public class NameClass { 
    public string name { get;set; } 
} 

이 그럼 당신은 JSON.NET와 역 직렬화 할 수 있어야 할 List<NameClass> :

List<NameClass> result = JsonConvert.Deserialize<List<NameClass>>(jsonString); 

이 내 머리에서 쓰여지므로 아마 복사 및 붙여 넣기로 컴파일되지 않지만 샘플로 작동해야합니다. 당신이 .NET DataContractJsonSerializer를 사용하여 형식 안전한 방법

var dict = JsonConvert.DeserializeObject<RootClass>(json); 
foreach (var obj in dict.names) 
{ 
    Console.WriteLine(obj.name); 
} 


public class RootClass 
{ 
    public MyName[] names { get; set; } 
} 

public class MyName 
{ 
    public string name { get; set; } 
} 
+0

-1 OP의 json 문자열이 배열이나 목록이 아니기 때문에 작동하지 않습니다. 쉬운 테스트 –

+0

루트 클래스의 필요성을 감독했습니다. @ L.B : 이것을 지적 해 주셔서 감사합니다 – Sascha

1

에서 사용하려는 경우 또는 당신이를 정의해야합니다 (윈도우 폰 지원) Json.Net

string json = @"{ ""names"" : [ {""name"":""bla""} , {""name"":""bla2""} ] }"; 

var dict = (JObject)JsonConvert.DeserializeObject(json); 
foreach (var obj in dict["names"]) 
{ 
    Console.WriteLine(obj["name"]); 
} 

를 사용

+0

-1 OP의 json 문자열이 배열이나 목록이 아니기 때문에 작동하지 않습니다. 쉬운 테스트. –

+0

물론 그것은 doesnt 일, 그 프로그램이 아닌 롤. 그는 그를 위해 끝내기를 바라지 않고, 다음에 무엇을해야하는지 물었다. 보시다시피, 저는 완전히 자신의 임무를 위해 두 가지 주요 구성 요소를 시연했습니다. Lol, some people .... –

+0

당신의 대답은 OP의 json 문자열을 ** 루트 객체가 아닌 ** List로 역 직렬화하려고 시도하고있었습니다. 그리고 지금 당신은 '당연히 does not work'라고 말합니다. 대답하는 좋은 정책. 당신이 그것을 기대하지 않기 때문에 무작위로 쓴다. LOL –

관련 문제