Parsing Json in UWP

微笑、不失礼 提交于 2020-01-04 07:51:11

问题


I’m working on UWP and I’m trying to parse this Json but can't understand why this code can't work please anyone can check it with me need help. Thank you. And there is a problem in getting the list variable (List).

Any help is appreciated.

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;

    }
}
}

回答1:


Your api return a value of jsonObject type and you try to convert that to an array.

you can try this. At first add Newtonsoft.Json from manage nuget package of add reference.

Now paste your json response to this site jsonToC# and add generated to classes to your project. For your reference api you will get 2 class like this.

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; }
}

then add following code & will get all data at result.

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


来源:https://stackoverflow.com/questions/36516146/parsing-json-in-uwp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!