Список становится пустым после десериализации JSON из веб-URL - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь получить данные (вакансии) в формате JSON с веб-адреса в объект (ы) в C#, чтобы я мог делать с ним другие вещи.

Main.cs

String rawJSON = webClient.DownloadString("the_url");
VacancyCollection vacancyCollection = JsonConvert.DeserializeObject<VacancyCollection>(rawJSON);
Console.WriteLine(vacancyCollection.vacancies.Count);

Класс вакансии:

class Vacancy
{
    public string id { get; set; }
    public string title { get; set; }
    public string url { get; set; }
}

Класс VacancyCollection:

class VacancyCollection
{
    public List<Vacancy> vacancies { get; set; }
}

Ошибка:

Необработанное исключение: System.NullReferenceException: В экземпляре объекта не задана ссылка на объект. в ListFW.Program.Main (String [] args) в C: \ Users \ myName \ source \ repos \ ListFW \ ListFW \ Program.cs: line 39

Во время отладки я могу сказать что в необработанном JSON данные размещаются правильно, однако по какой-то загадочной причине, хотя это именно то, что показано здесь: https://www.youtube.com/watch?v=XssLaKDRV4Y это не работает, как показано там.

JSON пример:

{
  "jobs": [
    {
      "id": "P627",
      "title": "job title1",
      "url": "https://www.site.extension/job/159357"
    },
    {
      "id": "P628",
      "title": "job title2",
      "url": "https://www.site.extension/job/139900"
    }
  ]
}

1 Ответ

0 голосов
/ 16 июня 2020

Проблема в том, что в вашем классе VacancyCollection список называется vacancies, тогда как в JSON это jobs. Десериализатор не знает, что вы собираетесь отображать их, если вы не сообщите об этом каким-либо образом. Вы можете либо изменить имя свойства, чтобы оно соответствовало JSON (или наоборот), либо еще лучше добавить атрибут [JsonProperty] в свой класс, чтобы указать отображение следующим образом:

class VacancyCollection
{
    [JsonProperty("jobs")]
    public List<Vacancy> vacancies { get; set; }
}

Fiddle : https://dotnetfiddle.net/3hnkhn

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...