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