在https://status.cloud.google.com/incidents.json上,如果我没记错的话,Google正在使用Json Array。我正在使用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; }
}
}
答案 0 :(得分: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; }
只要您想在类中使用与JSON中不同的属性名称,就可以随时使用[JsonProperty]
。