Десериализация массива Newtonsoft Json или это просто список

#c# #json #json.net

#c# #json #json.net

Вопрос:

На https://status.cloud.google.com/incidents.json Google использует массив Json, если я не ошибаюсь. Я использую Newtonsoft.Json и десериализуйте json, используя приведенный ниже код. Правильно ли я использую метод для извлечения json?

 using (var webClient = new WebClient())
{
    String rawJSON = webClient.DownloadString("https://status.cloud.google.com/incidents.json");
    StatusCollection statusCollection = JsonConvert.DeserializeObject<StatusCollection>(rawJSON);
    Console.WriteLine(statusCollection.Statuses.Count);
}
 

status.cs

 namespace StatusJSONv1
{

    public class Status
    {
        string Begin { get; set; }
        string Created { get; set; }
        string End { get; set; }
        string External_desc { get; set; }
        string Modified { get; set; }
        MRUpdateContainer Most_recent_update { get; set; }
        int Number { get; set; }
        bool Public { get; set; }
        string Service_key { get; set; }
        string Service_name { get; set; }
        string Severity { get; set; }
        List<Update> Updates { get; set; }
        string Uri { get; set; }
    }


    public class MRUpdateContainer
    {
        string Created { get; set; }
        string Modified { get; set; }
        string Text { get; set; }
        string When { get; set; }
    }
    public class Update
    {
        string Created { get; set; }
        string Modified { get; set; }
        string Text { get; set; }
        string When { get; set; }
    }
}
 

Комментарии:

1. Am I using the right method to pull in the json? ну, вы пробовали это? Что такое statusCollection , вы проверяете количество, не так ли, что это?

Ответ №1:

Да, JSON, с которым вы связались, является массивом JSON. Итак, вам нужно десериализовать его в список (или массив).

 List<Status> statusCollection = JsonConvert.DeserializeObject<List<Status>>(rawJSON);
Console.WriteLine(statusCollection.Count);
 

Однако есть несколько других проблем с вашим кодом:

  1. Все ваши свойства класса должны быть public , в противном случае Json.Net не сможет получить к ним доступ.
  2. Most_recent_update Свойство в вашем Status классе не соответствует имени в JSON (JSON использует дефисы для этого свойства). Чтобы исправить это, вам нужно использовать [JsonProperty] атрибут в вашем классе следующим образом:
     [JsonProperty("most-recent-update")]
    public MRUpdateContainer Most_recent_update { get; set; }
     

    Вы можете использовать [JsonProperty] любое время, когда захотите использовать другое имя свойства в своем классе по сравнению с тем, что есть в JSON.

Скрипка: https://dotnetfiddle.net/8FtAJg

Комментарии:

1. Рад, что смог помочь.