Словари и Flurl - PullRequest
       131

Словари и Flurl

0 голосов
/ 05 августа 2020

Я sh, чтобы получить доступ к спрайту "front_default" в PokeAPI для бульбазавра (https://pokeapi.co/).

У меня есть следующий инициализатор коллекции:

public class PokemonModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Dictionary<string, string> Sprites { get; set; }
}

И следующий код для моего WPF MainWindow:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private async Task LoadImage(int pokedexNumber = 1)
    {
        PokedexProcess pkdx = new PokedexProcess();
        PokemonModel pkmn = await pkdx.LoadPokedex(pokedexNumber);
        var uriSource = new Uri(Convert.ToString(pkmn.sprites["front_default"]), UriKind.Absolute);
        pokemonImage.Source = new BitmapImage(uriSource);
    }

    private async void Window_Loaded(object sender, RoutedEventArgs e)
    {
        await LoadImage();
    }

    private async void Button_Click(object sender, RoutedEventArgs e)
    {
    }
}

public class PokedexProcess
{
    public async Task<PokemonModel> LoadPokedex(int number)
    {
        var url = new Url($"https://pokeapi.co/api/v2/pokemon/{ number }");
        PokemonModel pkmn = await url.GetJsonAsync<PokemonModel>();
        return pkmn;

    }
}

Однако, когда я пытаюсь получить доступ к спрайту с его помощью, я получаю следующее сообщение об ошибке:

Flurl .Http.FlurlParsingException: 'Не удалось десериализовать ответ на JSON: GET https://pokeapi.co/api/v2/pokemon/1'

Внутреннее исключение

JsonReaderException: неожиданно символ, обнаруженный при анализе значения: {. Путь 'sprites.other', строка 1, позиция 162133.

Единственная ошибка, о которой я мог подумать, - это попытка получить к нему неправильный доступ.

Чтобы получить доступ к спецификациям c спрайт, мне нужно получить доступ https://pokeapi.co/api/v2/pokemon/1, а затем спрайты-> front_default-> url изображения

1 Ответ

0 голосов
/ 05 августа 2020

Вы получаете сообщение об ошибке, потому что ваша модель ожидает, что все значения в sprites являются ключами со значениями для Dictionary. Однако, согласно полезной нагрузке, поле sprites также содержит объекты.

здесь

...