Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Todos os campos

using System.Text.Json.Serialization;

namespace Desafios
{
    internal class PersonagemGOT : IDetalhavel
    {

        [JsonPropertyName("url")]
        public string? Url { get; set; }

        [JsonPropertyName("name")]
        public string? Nome { get; set; }


        private string? _genero; 
        [JsonPropertyName("gender")]
        public string? Genero 
        {   
            get => _genero;
            set => _genero = value == "Female" ? "Feminino" : "Masculino";
        }

        [JsonPropertyName("culture")]
        public string? Cultura { get; set; }

        [JsonPropertyName("born")]
        public string? Nascimento { get; set; }

        [JsonPropertyName("died")]
        public string? Morte { get; set; }


        [JsonPropertyName("titles")]
        public List<string>? Titulos { get; set; }

        [JsonPropertyName("aliases")]
        public List<string>? Apelidos { get; set; }

        [JsonPropertyName("father")]
        public string? Pai {  get; set; }

        [JsonPropertyName("mother")]
        public string? Mae { get; set; }

        [JsonPropertyName("spouse")]
        public string? Conjuge { get; set; }

        [JsonPropertyName("allegiances")]
        public List<string>? CasasAliadas { get; set; }

        [JsonPropertyName("books")]
        public List<string>? LivrosQueApareceu { get; set; }

        [JsonPropertyName("povBooks")]
        public List<string>? LivrosVisaoDoPersonagem { get; set; }

        [JsonPropertyName("tvSeries")]
        public List<string>? SeriesTVQueApareceu { get; set; }

        [JsonPropertyName("playedBy")]
        public List<string>? AtoresOuAtrizesQueInterpretaramOPersonagem { get; set; }

        public void Detalhes()
        {
            string ListaOuVazio(List<string>? lista)
                => lista is null || lista.Count == 0
                    ? "N/A"
                    : string.Join(", ", lista);

            Console.WriteLine(
        $"""
        URL: {Url ?? "N/A"}
        Nome: {Nome ?? "N/A"}
        Gênero: {Genero ?? "N/A"}
        Cultura: {Cultura ?? "N/A"}
        Nascimento: {Nascimento ?? "N/A"}
        Morte: {Morte ?? "N/A"}
        Títulos: {ListaOuVazio(Titulos)}
        Apelidos: {ListaOuVazio(Apelidos)}
        Pai: {Pai ?? "N/A"}
        Mãe: {Mae ?? "N/A"}
        Cônjuge: {Conjuge ?? "N/A"}
        Casas Aliadas: {ListaOuVazio(CasasAliadas)}
        Livros (aparições): {ListaOuVazio(LivrosQueApareceu)}
        Livros (POV): {ListaOuVazio(LivrosVisaoDoPersonagem)}
        Séries de TV: {ListaOuVazio(SeriesTVQueApareceu)}
        Interpretado por: {ListaOuVazio(AtoresOuAtrizesQueInterpretaramOPersonagem)}
        """
            );
        }

    }
}


using System.Text.Json;

namespace Desafios;

internal class JsonDesserializado
{
    public static void Detalhar<T>(string endPointLink) where T : IDetalhavel
    {   
        
        using HttpClient client = new();

        try
        {
            string resposta = client.GetStringAsync(endPointLink).GetAwaiter().GetResult();

            JsonElement root = JsonSerializer.Deserialize<JsonElement>(resposta);

            if (root.ValueKind == JsonValueKind.Array)
            {
                var registros = JsonSerializer.Deserialize<List<T>>(resposta)!;

                foreach (var registro in registros)
                {
                    registro.Detalhes();
                }
            }
            else
            {
                var registro = JsonSerializer.Deserialize<T>(resposta)!;
                registro.Detalhes();
            }

        }
        catch (Exception ex)
        {
            Console.WriteLine($"Temos um problema: {ex}");
        }
    }
}
using Desafios;

internal class Program
{
    private static void Main(string[] args)
    {
        string numeroPersonagemGOT = "16";
        string url = $"https://www.anapioficeandfire.com/api/characters/{numeroPersonagemGOT}";
        JsonDesserializado.Detalhar<PersonagemGOT>(url);
    }
}
1 resposta
solução!

Oi, Robson! Como vai?

Agradeço por compartilhar.

Gostei da sua análise e da forma como você organizou a classe PersonagemGOT, principalmente no cuidado com os campos opcionais e no uso do LINQ indireto ao tratar listas e exibições.

Continue explorando esse padrão, pois ele ajuda bastante em projetos maiores.

Siga testando variações do endpoint para validar diferentes retornos da API e ganhar mais confiança.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!