加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Invalidcastexception JsonConvert.DeserializeObject

发布时间:2020-12-15 23:34:38 所属栏目:百科 来源:网络整理
导读:我收到一个无效的强制转换异常,指定的强制转换无效.在这一行: RootObject mountain = JsonConvert.DeserializeObjectRootObject(json1); 从documentation这应该没问题?我可以看到控制台输出正常吗? Response: [{“Height_ft”: 2999.0,“Height_m”: 914.
我收到一个无效的强制转换异常,指定的强制转换无效.在这一行:

RootObject mountain = JsonConvert.DeserializeObject<RootObject>(json1);

从documentation这应该没问题?我可以看到控制台输出正常吗?

Response: [{“Height_ft”: 2999.0,“Height_m”: 914.0,“ID”: “c1”,
“Latitude”: 57.588007,“Longitude”: -5.5233564,“Name”: “Beinn Dearg”,
“humidity”: 0.81,“snowCover”: 4.99,“temperature”: 63.0}]

Spinner spinner = (Spinner)sender;
        string urlmountain = "http://removed.azurewebsites.net/api/Mountains?name=";
        JsonValue json1 = FetchMountain(urlmountain+string.Format("{0}",spinner.GetItemAtPosition(e.Position)));
        //below.................................
        RootObject mountain = JsonConvert.DeserializeObject<RootObject>(json1); //this line
        string toast = mountain.Name;
        Toast.MakeText(this,toast,ToastLength.Long).Show();

    private JsonValue FetchMountain(string urlmountain)
    {
        // Create an HTTP web request using the URL:
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri(urlmountain));
        request.ContentType = "application/json";
        request.Method = "GET";

        // Send the request to the server and wait for the response:
        using (WebResponse response = request.GetResponse())
        {
            // Get a stream representation of the HTTP web response:
            using (Stream stream = response.GetResponseStream())
            {
                // Use this stream to build a JSON document object:
                JsonValue jsonDoc1 = JsonObject.Load(stream);
                Console.Out.WriteLine("Response: {0}",jsonDoc1.ToString());

                // Return the JSON document:
                return jsonDoc1;
            }
        }
    }
    public class RootObject
    {
        public string ID { get; set; }

        public double? Latitude { get; set; }

        public double? Longitude { get; set; }

        public string Name { get; set; }

        public double? Height_m { get; set; }

        public double? Height_ft { get; set; }

        public double? temperature { get; set; }

        public double? humidity { get; set; }

        public double? snowCover { get; set; }

        public override string ToString()
        {
            return Name;
        }
    }

解决方法

返回的json数据是一个对象数组,而不是单个对象,由开括号和右括号[]表示.您需要反序列化为数组或列表:

var mountains = JsonConvert.DeserializeObject<List<RootObject>>(json);

要从反序列化的有效负载访问第一个山,请使用.FirstOrDefault().

var mountain = mountains.FirstOrDefault();
if (mountain != null)
{
    string toast = mountain.Name;
    Toast.MakeText(this,ToastLength.Long).Show();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读