2012-02-06 4 views
0

목록의 목록에서 json 데이터를 반환하려고합니다. 웹 클라이언트를 사용하여 데이터를 가져오고 JSON.NET을 사용하여 직렬화를 해제합니다. "결과"목록에있는 "featuredCharts"목록에서 이름과 이미지를 반환하고 싶습니다. 여기 제가 언급하고있는 json 데이터의 일부입니다.WP7 목록 내의 목록을 반환하는 JSON

"results":{ 
    "featuredCharts":[ 
    { 
     "id":46082, 
     "type":"chart", 
     "name":"Exclusives On Beatport - Week 5", 
     "slug":"exclusives-on-beatport-week-5", 
     "description":"", 
     "publishDate":"2012-01-30", 
     "price":{ 
      "code":"usd", 
      "symbol":"$", 
      "value":2390 
     }, 
     "audioFormatFee":{ 
      "wav":{ 
       "code":"usd", 
       "symbol":"$", 
       "value":1000 
      }, 
      "aiff":{ 
       "code":"usd", 
       "symbol":"$", 
       "value":1000 
      } 
     }, 
     "genres":[ 
      { 
       "id":11, 
       "name":"Tech House", 
       "slug":"tech-house", 
       "type":"genre" 
      }, 
      { 
       "id":5, 
       "name":"House", 
       "slug":"house", 
       "type":"genre" 
      }, 
      { 
       "id":17, 
       "name":"Electro House", 
       "slug":"electro-house", 
       "type":"genre" 
      }, 
      { 
       "id":15, 
       "name":"Progressive House", 
       "slug":"progressive-house", 
       "type":"genre" 
      } 
     ], 
     "images":{ 
      "small":{ 
       "width":30, 
       "height":30, 
       "url":"http:\/\/geo-media.beatport.com\/items\/imageCatalog\/4000000\/900000\/50000\/1000\/200\/40\/4951247.jpg", 
       "secureUrl":"https:\/\/media.beatport.com\/items\/imageCatalog\/4000000\/900000\/50000\/1000\/200\/40\/4951247.jpg" 
      }, 
      "medium":{ 
       "width":60, 
       "height":60, 
       "url":"http:\/\/geo-media.beatport.com\/items\/imageCatalog\/4000000\/900000\/50000\/1000\/200\/40\/4951248.jpg", 
       "secureUrl":"https:\/\/media.beatport.com\/items\/imageCatalog\/4000000\/900000\/50000\/1000\/200\/40\/4951248.jpg" 
      }, 
      "large":{ 
       "width":130, 
       "height":130, 
       "url":"http:\/\/geo-media.beatport.com\/items\/imageCatalog\/4000000\/900000\/50000\/1000\/200\/40\/4951249.jpg", 
       "secureUrl":"https:\/\/media.beatport.com\/items\/imageCatalog\/4000000\/900000\/50000\/1000\/200\/40\/4951249.jpg" 
      }, 
      "xlarge":{ 
       "width":500, 
       "height":500, 
       "url":"http:\/\/geo-media.beatport.com\/items\/imageCatalog\/4000000\/900000\/50000\/1000\/200\/50\/4951250.jpg", 
       "secureUrl":"https:\/\/media.beatport.com\/items\/imageCatalog\/4000000\/900000\/50000\/1000\/200\/50\/4951250.jpg" 
      } 
     }, 
     "chartOwner":null 
    }, 

내 수업은 현재 이와 같이 설정되어 있습니다.

public class NewReleasesCharts //Root Object 
{ 
    public Metadata metadata { get; set; } 
    public List<ResultHome> results = new List<ResultHome>(); 

    public IEnumerator<ResultHome> GetEnumerator() 
    { 
     return this.results.GetEnumerator(); 
    } 
} 

public class ResultHome 
{ 
    public List<FeaturedCharts> featuredCharts { get; set; } 
    public List<FeaturedReleases> featuredReleases { get; set; } 
} 

public class FeaturedCharts 
{ 
    public int id { get; set; } 
    public string type { get; set; } 
    public string name { get; set; } 
    public string slug { get; set; } 
    public ChartImages chartImages { get; set; } 
} 

public class ChartImages 
{ 
    public ChartSmall chartSmall { get; set; } 
    public ChartMedium chartMedium { get; set; } 
    public ChartLarge chartLarge { get; set; } 
} 

public class ChartMedium 
{ 
    public int width { get; set; } 
    public int height { get; set; } 
    public string url { get; set; } 
    public string secureUrl { get; set; } 
} 

이것은 내가 계속 붙잡고있는 부분입니다. 데이터를 deserialize 한 후 중첩 된 foreach 루프를 사용하는 것에 대해 생각했지만 현재 "Beatport.Classes.ResultHome 형식을 Beatport.Classes.FeaturedCharts"형식으로 변환 할 수 없습니다. 여기에 코드가 있습니다.

업데이트 ColinE의 대답 당 내 코드가 업데이트되어 내부 foreach 루프에서 NullReferenceException 오류가 발생합니다. 내가 중첩 된 foreach는 갈 올바른 방법입니다 루프 있는지 확실하지 않습니다 그래서 C#을에 관해서

// Deserialize home page data 
    void jsonHome_GetDataCompleted(object snder, DownloadStringCompletedEventArgs e) 
    { 
     try 
     { 
      NewReleasesCharts homeData = JsonConvert.DeserializeObject<NewReleasesCharts>(e.Result); 

      try 
      { 
       // Nested foreach loops to dispaly data 
       foreach (ResultHome rc in homeData) 
       { 
        try 
        { 
         foreach (FeaturedCharts fc in rc.featuredCharts) 
         { 
          // TODO: return name and image of chart 
          string name = fc.name; 
          listCharts.Items.Add(name); 
         } 
        } 
        catch (Exception ex) 
        { 
         MessageBox.Show(ex.Message); 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 

나는 여전히 초보자입니다. 이 작업을 올바르게 수행하는 방법의 예는 앱의 다른 부분에서이 작업을 수행해야하므로 빌드를 할 수있는 방법을 제공합니다.

감사합니다.

답변

0

두 번째 for 루프는 첫 번째 루프와 동일한 데이터를 반복합니다. 당신은 외부 루프에서 반복 변수 존재의 featuredCharts 특성을 반복해야합니다

try 
    { 
     NewReleasesCharts homeData = JsonConvert.DeserializeObject<NewReleasesCharts>(e.Result); 

     // foreach loop to dispaly data 
     foreach (ResultHome rc in homeData) 
     { 
      foreach (FeaturedCharts fc in rc.featuredCharts) 
      { 
       // return name and image of chart 
      } 
     } 
    } 

코드에서 중단 점을 설정하고 디버그 모드로 실행 해, 기능에서 이러한 문제를 해결하기 위해. 그런 다음 각 변수의 유형을 검사하여 잘못된 결과를 판별 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 귀하의 예제를 사용하여 내부 foreach 루프에 NullReferenceException이 표시됩니다. 새 코드의 업데이트를 참조하십시오. – nos9

관련 문제