【问题标题】:Why am I getting a JSON deserializing error with a REST API?为什么我在使用 REST API 时收到 JSON 反序列化错误?
【发布时间】:2020-05-21 15:13:43
【问题描述】:

我正在尝试使用 REST Sharp 通过 API 访问 COVID19 JSON 格式的数据,但是当我尝试按照下面的反序列化时出现错误。我是 Rest Sharp 的新手。不知道我错过了什么。

C# 代码 公共无效 getCOVIDData() {

        var client = new RestClient("https://covid-19-data.p.rapidapi.com/country?format=json&name=France");
        var request = new RestRequest(Method.GET);
        request.AddHeader("x-rapidapi-host", "covid-19-data.p.rapidapi.com");
        request.AddHeader("x-rapidapi-key", constants.apiKey);

        IRestResponse<COVID_Data.RootObject> response = client.Execute<COVID_Data.RootObject>(request);

        //the below line returns a JSON object without a problem
        string covidData = JsonConvert.DeserializeObject(response.Content).ToString();

        //this line returns NewtonSoft.JSON.JSON.SerializationException error (see screen shot)
        COVID_Data.RootObject data = JsonConvert.DeserializeObject<COVID_Data.RootObject>(response.Content);
    }

返回的对象是

[ { “国家”:“法国”, “代码”:“FR”, “确认”:181575, “恢复”:63354, “关键”:1794, “死亡”:28239, “纬度”:46.227638, “经度”:2.213749, "lastChange": "2020-05-20T14:53:01-04:00", “上次更新”:“2020-05-21T10:15:02-04:00” } ]

当我尝试创建 COVID_Data 类并反序列化为 RootObject 时,我收到以下异常错误。

JSON

COVID_Class 设置如下。

公共类 COVID_Data {

    public class  RootObject
    {
        [JsonProperty("country")]
        public  string country { get; set; }

        [JsonProperty("code")]
        public string code { get; set; }

        [JsonProperty("confirmed")]
        public int confirmed { get; set; }

        [JsonProperty("recovered")]
        public int recovered { get; set; }

        [JsonProperty("critical")]
        public int critical { get; set; }

        [JsonProperty("deaths")]
        public int deaths { get; set; }

        [JsonProperty("latitude")]
        public double latitude { get; set; }

        [JsonProperty("longitude")]
        public double longitude { get; set; }

        [JsonProperty("lastChange")]
        public string lastChange { get; set; }

        [JsonProperty("lastUpdate")]
        public string lastUpdate { get; set; }
    }


}

【问题讨论】:

  • 那个 JSON 的根是一个 array,而不是那个对象。
  • 谢谢。代码中如何解决还是有点模糊。

标签: json api deserialization restsharp


【解决方案1】:

我能够使用 JArray 然后迭代 JTokens 让它工作。

JArray 数组 = JArray.Parse(response.Content);

字符串输出文本 = "";

字符串 twoNewLines = Environment.NewLine + Environment.NewLine;

        foreach (JToken pair in array)  

          outputText = "Country: " + array[0]["country"] + twoNewLines +
                "Confirmed: " + array[0]["confirmed"] + twoNewLines +
                "Recovered: " + array[0]["recovered"] + twoNewLines +
                "Critical: " + array[0]["critical"] + twoNewLines +
                "Deaths: " + array[0]["deaths"] + twoNewLines +
                "Last Update: " + array[0]["lastUpdate"];

1中的输出文本

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 2011-03-31
    • 2021-05-27
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    相关资源
    最近更新 更多