2016-04-09 24 views
1

Ich arbeite an UWP und ich versuche diese Json zu analysieren, kann aber nicht verstehen, warum dieser Code nicht, dass jemand arbeiten kann es bitte mit mir überprüfen Hilfe benötigen. Vielen Dank. Und es gibt ein Problem beim Abrufen der Listenvariablen (Liste).Parsing Json in UWP

Jede Hilfe wird geschätzt.

namespace testapi2 
{       


/// </summary> 
public sealed partial class MainPage : Page 
{ 
    public MainPage() 
    { 
     this.InitializeComponent(); 
     jsonCall(); 
    } 
    public async void jsonCall() 
    { 
     List<Result> listResult = new List<Result>(); 
     var client = new HttpClient(); 
     HttpResponseMessage response = 
     await client.GetAsync(new Uri("http://api-public.guidebox.com/v1.43/Tunisia/rKgEWJbFg0kgEHrcGXPKhPDo0XtTafyC/movies/all/250/250")); 
     client.DefaultRequestHeaders.TryAddWithoutValidation("accept", "application/json"); 
     var array = await response.Content.ReadAsStringAsync(); 
     JsonArray ja = JsonValue.Parse(array).GetArray();    
     for (uint i = 0; i < ja.Count; i++) 
     { 
      //Debug.WriteLine(i); 
      Result result = new Result(); 
      int id = Convert.ToInt32(ja.GetObjectAt(i).GetNamedValue("id")); 
      string title = ja.GetObjectAt(i).GetNamedString("title"); 
      int release_year = Convert.ToInt32(ja.GetObjectAt(i).GetNamedNumber("release_year")); 
      int themoviedb = Convert.ToInt32(ja.GetObjectAt(i).GetNamedString("themoviedb")); 
      string original_title = ja.GetObjectAt(i).GetNamedString("original_title"); 
      // List<object> alternate_titles = ja.GetObjectAt(i).GetNamedArray("alternate_titles"); 
      string imdb = ja.GetObjectAt(i).GetNamedString("imdb"); 
      bool pre_order = ja.GetObjectAt(i).GetNamedBoolean("pre_order"); 
      bool in_theaters = ja.GetObjectAt(i).GetNamedBoolean("in_theaters"); 
      string release_date = ja.GetObjectAt(i).GetNamedString("release_date"); 
      string rating = ja.GetObjectAt(i).GetNamedString("rating"); 
      int rottentomatoes = Convert.ToInt32(ja.GetObjectAt(i).GetNamedString("rottentomatoes")); 
      string freebase = ja.GetObjectAt(i).GetNamedString("freebase"); 
      int wikipedia_id = Convert.ToInt32(ja.GetObjectAt(i).GetNamedString("wikipedia_id")); 
      string metacritic = ja.GetObjectAt(i).GetNamedString("metacritic"); 
      string common_sense_media = ja.GetObjectAt(i).GetNamedString("common_sense_media"); 
      string poster_120x171 = ja.GetObjectAt(i).GetNamedString("poster_120x171"); 
      string poster_240x342 = ja.GetObjectAt(i).GetNamedString("poster_240x342"); 
      string poster_400x570 = ja.GetObjectAt(i).GetNamedString("poster_400x570"); 
      listResult.Add(result);       

     } 
     // Debug.WriteLine("hello", listResult); 
     list.ItemsSource = listResult; 

    } 
} 
} 

Antwort

6

Ihre API geben Sie einen Wert von JsonObject Typ zurück und Sie versuchen, das in ein Array zu konvertieren.

Sie können dies versuchen. Fügen Sie zuerst Newtonsoft.Json aus dem Management-Nugget-Paket hinzu.

enter image description here

Jetzt ist Ihre Json Antwort auf diese Seite jsonToC# einfügen und fügen Sie Klassen zu einem Projekt generiert. Für Ihre Referenz api erhalten Sie 2 Klasse wie folgt.

public class Result 
{ 
    public int id { get; set; } 
    public string title { get; set; } 
    public int release_year { get; set; } 
    public int themoviedb { get; set; } 
    public string original_title { get; set; } 
    public List<object> alternate_titles { get; set; } 
    public string imdb { get; set; } 
    public bool pre_order { get; set; } 
    public bool in_theaters { get; set; } 
    public string release_date { get; set; } 
    public string rating { get; set; } 
    public int rottentomatoes { get; set; } 
    public string freebase { get; set; } 
    public int wikipedia_id { get; set; } 
    public string metacritic { get; set; } 
    public string common_sense_media { get; set; } 
    public string poster_120x171 { get; set; } 
    public string poster_240x342 { get; set; } 
    public string poster_400x570 { get; set; } 
} 

public class RootObject 
{ 
    public int total_results { get; set; } 
    public int total_returned { get; set; } 
    public List<Result> results { get; set; } 
} 

dann folgenden Code hinzufügen & werden alle Daten auf Ergebnis.

var json = await response.Content.ReadAsStringAsync(); 
var result= JsonConvert.DeserializeObject<RootObject>(json); 
+0

Dank Freund. bitte u kann mir sagen, wie man dieses Problem beheben // Liste alternate_titles = ja.GetObjectAt (i) .GetNamedArray ("alternate_titles"); –

+0

danke Freund, pleasse juse eine letzte Sache Liste alternate_titles, wie es geschrieben wird? danke –

+0

Hallo Wassim, bitte überprüfen Sie jetzt. Entschuldigung für spät. –