牛顿软件 Json 数组反序列化还是这只是一个列表



如果我没记错的话,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);

但是,您的代码还有其他一些问题:

  1. 您的类属性都需要public,否则 Json.Net 将无法访问它们。
  2. Status类中的Most_recent_update属性与 JSON 中的名称不匹配(JSON 对此属性使用连字符)。 要修复,您需要在类中使用[JsonProperty]属性,如下所示:

    [JsonProperty("most-recent-update")]
    public MRUpdateContainer Most_recent_update { get; set; }
    

    您可以随时使用[JsonProperty]您希望在类中使用与 JSON 中的属性名称不同的属性名称。

小提琴:https://dotnetfiddle.net/8FtAJg

相关内容

  • 没有找到相关文章

最新更新