#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);
Однако есть несколько других проблем с вашим кодом:
- Все ваши свойства класса должны быть
public
, в противном случае Json.Net не сможет получить к ним доступ. 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. Рад, что смог помочь.