Синтаксический анализ JSON из Pokeapi

#c# #json #api

#c# #json #API

Вопрос:

Я пытаюсь понять, как вызвать API (Pokeapi) и проанализировать данные, полученные в ответе, в объект во внешней библиотеке (PokeApi.NET ) в C #.

Я получаю ответ в своем коде на C #, но мне трудно преобразовать ответ в объект.

Я считаю, что проблема связана с последней строкой кода, но я не уверен, какой она должна быть?

C # код:

 private static string URL = "http://pokeapi.co/api/v2/pokemon/";

static async void GetPokemonAsync()
{
    string page = URL;

    using (HttpClient client = new HttpClient())
    using (HttpResponseMessage response = await client.GetAsync(page))
    using (HttpContent content = response.Content)
    {
        string result = await content.ReadAsStringAsync();

        if (result != null amp;amp; result.Length >= 50)
        {
            Console.WriteLine(result.Substring(0,200));
            PokeAPI.Pokemon a = JsonConvert.DeserializeObject<PokeAPI.Pokemon>(result);
        }
    }
}
 

пример результата:

 {"count":811,"previous":null,"results":[{"url":"http://pokeapi.co/api/v2/pokemon/1/","name":"bulbasaur"},{"url":"http://pokeapi.co/api/v2/pokemon/2/","name":"ivysaur"},{"url":"http://pokeapi.co/api/v2/pokemon/3/","name":"venusaur"},{"url":"http://pokeapi.co/api/v2/pokemon/4/","name":"charmander"},{"url":"http://pokeapi.co/api/v2/pokemon/5/","name":"charmeleon"},{"url":"http://pokeapi.co/api/v2/pokemon/6/","name":"charizard"},...
 

Ответ №1:

Это должно быть вашей структурой классов.

 public class Result
{
    public string url { get; set; }
    public string name { get; set; }
}

public class Pokemon
{
    public int count { get; set; }
    public object previous { get; set; }
    public List<Result> results { get; set; }
}
 

Это должен быть действительный json.

 {
"count": 811,
"previous": null,
"results": [{
    "url": "http://pokeapi.co/api/v2/pokemon/1/",
    "name": "bulbasaur"
}, {
    "url": "http://pokeapi.co/api/v2/pokemon/2/",
    "name": "ivysaur"
}, {
    "url": "http://pokeapi.co/api/v2/pokemon/3/",
    "name": "venusaur"
}, {
    "url": "http://pokeapi.co/api/v2/pokemon/4/",
    "name": "charmander"
}, {
    "url": "http://pokeapi.co/api/v2/pokemon/5/",
    "name": "charmeleon"
}, {
    "url": "http://pokeapi.co/api/v2/pokemon/6/",
    "name": "charizard"
}]
}
 

Комментарии:

1. Спасибо. Это имеет смысл, но как мне избежать создания собственного класса Pokemon и вместо этого использовать PokeApi.NET внешняя библиотека?

Ответ №2: