Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Retorno da api

using (HttpClient client = new HttpClient())
{
    try
    {
        
        string response = await client.GetStringAsync("https://pokeapi.co/api/v2/pokemon/1/");
        var pokemon = JsonSerializer.Deserialize<Pokemon>(response)!;
        pokemon.Exibir();
    }
    catch(Exception ex)
    {
        Console.WriteLine("Deu ruim!!!", ex.Message);
    }
}

Esta api não esta me retornando o que eu quero de fato.

using System.Text.Json.Serialization;

public class Pokemon
{
    public List<string>? abilities { get; set; }
    public string? name { get; set; }
    public string? url { get; set; }


    public void Exibir()
    {
        Console.WriteLine("Habilidades:");
        foreach (var habilidades in abilities!)
        {
            Console.WriteLine($"- {habilidades}");
        }
        Console.WriteLine($"Nome: {name}");   
        Console.WriteLine($"Url: {url}");
               
    }
}

Pois esta caindo no bloco cath da aplicação.

2 respostas
solução!

Olá Diego, tudo bem?

Pelo que posso ver no seu código, parece que você está tentando deserializar o JSON retornado pela API da PokeAPI diretamente em um objeto do tipo Pokemon. No entanto, a estrutura do seu objeto Pokemon não parece corresponder à estrutura do JSON retornado pela API.

A PokeAPI retorna um objeto muito mais complexo, onde "abilities" é uma lista de objetos, não uma lista de strings. Cada objeto "abilities" tem uma propriedade "ability" que é um objeto com propriedades "name" e "url".

Aqui está um exemplo de como você poderia definir suas classes para corresponder à estrutura do JSON retornado pela API:

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

public class AbilityWrapper
{
    public Ability ability { get; set; }
}

public class Pokemon
{
    public List<AbilityWrapper> abilities { get; set; }
    public string name { get; set; }
    // outras propriedades...
}

E então, no seu método de exibição, você poderia fazer algo assim:

public void Exibir()
{
    Console.WriteLine("Habilidades:");
    foreach (var abilityWrapper in abilities)
    {
        Console.WriteLine($"- {abilityWrapper.ability.name}");
    }
    Console.WriteLine($"Nome: {name}");   
    // outras propriedades...
}

Por favor, verifique a documentação da API para ter certeza de que você está mapeando as propriedades corretamente.

Espero ter ajudado e bons estudos!

Valeu pela ajuda, agora eu entendi onde que eu estava errando, agora vou a manipular atraves do linq.