Десериализованная проблема GetJsonAsync <T>с Flurl - PullRequest
0 голосов
/ 04 декабря 2018

Я хочу проанализировать JSON, чтобы вывести список с Flurl.Мои данные в формате JSON вот так.

{
  "api": {
    "results": 114,
    "fixtures": {
      "195": {
        "fixture_id": "195",
        "event_timestamp": "1543759500",
        "event_date": "2018-12-02T14:05:00+00:00",
        "league_id": "2",
        "round": "Premier League - 14",
        "homeTeam_id": "42",
        "awayTeam_id": "47",
        "homeTeam": "Arsenal",
        "awayTeam": "Tottenham",
        "status": "Match Finished",
        "statusShort": "FT",
        "goalsHomeTeam": "4",
        "goalsAwayTeam": "2",
        "halftime_score": "1 - 2",
        "final_score": "4 - 2",
        "penalty": null,
        "elapsed": "87",
        "firstHalfStart": "1543759500",
        "secondHalfStart": "1543763100"
      }
}}}

, и у меня также есть класс, подобный этому.

class Fixture
    {
        //public string results { get; set; }
        public string fixture_id { get; set; }
        public string event_timestamp { get; set; }
        public string event_date { get; set; }
        public string league_id { get; set; }
        public string round { get; set; }
        public string homeTeam_id { get; set; }
        public string awayTeam_id { get; set; }
        public string homeTeam { get; set; }
        public string awayTeam { get; set; }
        public string status { get; set; }
        public string statusShort { get; set; }
        public string goalsHomeTeam { get; set; }
        public string goalsAwayTeam { get; set; }
        public string halftime_score { get; set; }
        public string final_score { get; set; }
        public string penalty { get; set; }
        public string elapsed { get; set; }
        public string firstHalfStart { get; set; }
        public string secondHalfStart { get; set; }
    }

Мой код ниже

            try
            {
                string _url = string.Format("https://api-football-v1.p.mashape.com/fixtures/date/{0}",(DateTime.Now.Year+"-"+DateTime.Now.Month+"-"+DateTime.Now.Day).ToString());
                //PERFORM IN BACKGROUND
                await Task.Run(async () =>
                {
                   var fixtures= await _url.WithHeader("Accept", "application/json").WithHeader("X-Mashape-Key", "g5vnMIqeChmshvK6H25VPavNCfhHp1KUtTkjsnOqEM06eP6cOd").GetJsonAsync<Fixture>();
                });
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }

Я пытаюсь получитьДанные JSON с Flurl.HTTP.Но у меня проблема с десериализацией.Где моя ошибка?

Как я могу проанализировать эти данные JSON в IList в c #?

Спасибо за ваши друзья поддержки ...

1 Ответ

0 голосов
/ 10 декабря 2018

В основном вы пытаетесь выбрать внутреннюю часть ответа JSON, и вы не можете этого сделать - вам нужно десериализовать структуру, представляющую ответ whole , а затем пройти эту структуру, чтобы получитьфизическое лицо Fixture.Глядя на полное тело ответа, вам нужно добавить еще 2 класса, чтобы содержать эту структуру:

public class ResponseBody
{
    public Api api { get; set; }
}

public class Api
{
    public int results { get; set; }
    public Dictionary<string, Fixture> fixtures { get; set; }
}

Затем вызовите GetJsonAsync<ResponseBody>() вместо GetJsonAsync<Fixture>().

...