Как сделать JSON доступным изнутри множества массивов? - PullRequest
0 голосов
/ 09 мая 2020

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

{
  "results": [
    {
      "id": "5d914028302b840050acbe62",
      "picture": "https://utellyassets9-1.imgix.net/api/Images/4e4d50a0040fd4500193202edbafce6a/Redirect",
      "name": "BoJack Horseman",
      "locations": [
        {
          "icon": "https://utellyassets7.imgix.net/locations_icons/utelly/black_new/NetflixIVAUS.png?w=92&auto=compress&app_version=ae3576e2-0796-4eda-b953-80cadc8e2619_eww2020-05-08",
          "display_name": "Netflix",
          "name": "NetflixIVAUS",
          "id": "5d81fe2fd51bef0f42268f0f",
          "url": "https://www.netflix.com/title/70298933"
        }
      ],
      "provider": "iva",
      "weight": 5654,
      "external_ids": {
        "iva_rating": null,
        "imdb": {
          "url": "https://www.imdb.com/title/tt3398228",
          "id": "tt3398228"
        },
        "tmdb": {
          "url": "https://www.themoviedb.org/movie/61222",
          "id": "61222"
        },
        "wiki_data": {
          "url": "https://www.wikidata.org/wiki/Q17733404",
          "id": "Q17733404"
        },
        "iva": {
          "id": "783721"
        },
        "gracenote": null,
        "rotten_tomatoes": null,
        "facebook": null
      }
    },
    {
      "id": "5e2ce07890c0e033a487e3d2",
      "picture": "https://utellyassets9-1.imgix.net/api/Images/326d2853ff6885c41b9adb05278017f6/Redirect",
      "name": "Dragon Ball Z: Bojack Unbound",
      "locations": [
        {
          "icon": "https://utellyassets7.imgix.net/locations_icons/utelly/black_new/iTunesIVAUS.png?w=92&auto=compress&app_version=ae3576e2-0796-4eda-b953-80cadc8e2619_eww2020-05-08",
          "display_name": "iTunes",
          "name": "iTunesIVAUS",
          "id": "5d80a9a5d51bef861d3740d3",
          "url": "https://itunes.apple.com/us/movie/dragon-ball-z-bojack-unbound-subtitled-original-version/id1381102560"
        }
      ],
      "provider": "iva",
      "weight": 0,
      "external_ids": {
        "iva_rating": null,
        "imdb": {
          "url": "https://www.imdb.com/title/tt0142238",
          "id": "tt0142238"
        },
        "tmdb": {
          "url": "https://www.themoviedb.org/movie/39105",
          "id": "39105"
        },
        "wiki_data": {
          "url": "https://www.wikidata.org/wiki/Q1255010",
          "id": "Q1255010"
        },
        "iva": {
          "id": "406043"
        },
        "gracenote": null,
        "rotten_tomatoes": null,
        "facebook": null
      }
    }
  ],
  "updated": "2020-05-08T05:19:01+0100",
  "term": "Bojack",
  "status_code": 200,
  "variant": "ivafull"
}

Хорошо, поэтому first 0: представляет вариант, возвращаемый API (в данном случае это всадник Боджек), и любое последующее число (если в нем указано 1: afterward) будет другим результатом.

Я попытался написать второй класс для работы с результатами (resultoverall), который контролируется общим,

    public class overall
    {
        [JsonProperty("status_code")]
        public string status_code { get; set; }
        [JsonProperty("term")]
        public string term { get; set; }
        [JsonProperty("updated")]
        public string updated { get; set; }

        [JsonProperty("results")]
        public List<resultoverall> results { get; set; }


    }

    public partial class resultoverall
    {
        [JsonProperty("name")]
        public string name { get; set; }


    }

и попытался

overall BestGamer = JsonConvert.DeserializeObject<overall>(thicky);
List<overall> ObjOrderList = JsonConvert.DeserializeObject<List<overall>>(thicky);

быть возможность доступа к данным как за пределами 0:, так и изнутри 0: (BestGamer / general обрабатывает снаружи, resultoshops / Tapioca обрабатывает внутри, но я получаю сообщение об ошибке типа, требующего массива JSON, хотя он уже в формате массива.

Как мне настроить это для доступа к данным внутри 0:, для каждого числа, которое появляется (так что если есть 2 варианта, я могу получить доступ к информации из оба?

Использование Console.WriteLine(BestGamer.updated); правильно дает мне информацию из всей группы, но использование Console.WriteLine(BestGamer.results.name); не работает, говоря:

Ошибка CS1061 имя метода расширения 'принятие первого аргумента типа' List 'может быть найдено (вам не хватает директивы using или ссылки на сборку?)

1 Ответ

0 голосов
/ 09 мая 2020

У вас есть объект JSON, а не массив. Следовательно, вы не можете десериализовать его как массив. Это верно. Вы уже десериализуете его в объект. Итак, после

overall BestGamer = JsonConvert.DeserializeObject<overall>(thicky);

вы можете получить доступ к объектам в results, например,

var numberOfResults = BestGamer.results.Count;
var firstResult = BestGamer.results[0];
var firstResultsName = BestGamer.results[0].name;
// or loop through the results
foreach (var item in BestGamer.results)
{
    // item.Name gives you the name of the current result
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...