如果我没记错的话,https://status.cloud.google.com/incidents.json 谷歌正在使用 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);
}
状态.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; }
}
}
是的,您链接到的 JSON 是一个 JSON 数组。 因此,您需要将其反序列化为列表(或数组)。
List<Status> statusCollection = JsonConvert.DeserializeObject<List<Status>>(rawJSON);
Console.WriteLine(statusCollection.Count);
但是,您的代码还有其他一些问题:
- 您的类属性都需要
public
,否则 Json.Net 将无法访问它们。 Status
类中的Most_recent_update
属性与 JSON 中的名称不匹配(JSON 对此属性使用连字符)。 要修复,您需要在类中使用[JsonProperty]
属性,如下所示:[JsonProperty("most-recent-update")] public MRUpdateContainer Most_recent_update { get; set; }
您可以随时使用
[JsonProperty]
您希望在类中使用与 JSON 中的属性名称不同的属性名称。
小提琴:https://dotnetfiddle.net/8FtAJg