使用JSON.NET反序列化JSON数据



我第一次使用API时遇到了麻烦。我已经设法使用GET来读取我需要的数据,那部分工作得很好,现在我需要反序列化我得到的JSON数据,我正在使用Newtonsoft的JSON . net库。当我反序列化数据时,问题似乎来了,因为它爆炸了,调试器没有帮助。我在网上尝试了一些建议,但没有成功,所以如果有人能启发我,我将不胜感激。这是代码:

 string url = "";
 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
 HttpWebResponse response = (HttpWebResponse)request.GetResponse();
 Stream receiveStream = response.GetResponseStream();
 StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);
 string responseData = readStream.ReadToEnd();
 var results = JsonConvert.DeserializeObject<dynamic>(responseData);
 var id = results["id"].Value;
 // var name = results.Name;

当我运行它时,调试器在最后一行代码抛出以下异常:

{"访问的JArray值具有无效的键值:"id"。期望数组位置索引。"}

我相当确定ID存在于我返回的数据中。

从Smarty Streets返回的Json数据:

 [
{
    "id": 0,
    "candidate_index": 0,
    "delivery_line_1": "1600 Amphitheatre Pkwy",
    "last_line": "Mountain View CA 94043-1351",
    "delivery_point_barcode": "940431351000",
    "components": {
        "primary_number": "1600",
        "street_name": "Amphitheatre",
        "street_suffix": "Pkwy",
        "city_name": "Mountain View",
        "state_abbreviation": "CA",
        "zipcode": "94043",
        "plus4_code": "1351",
        "delivery_point": "00",
        "delivery_point_check_digit": "0"
    },
   ]

您的响应是一个数组而不是单个对象。所以你应该使用

JArray results = JArray.Parse(responseData)

解析结果(如results[0]["id"])。如果是动态的,那么

dynamic results = JArray.Parse(responseData)

现在,你可以像使用results[0].id

另一个选择是"Paste JSON as classes",这样可以快速轻松地反序列化。

  1. 简单复制整个JSON
  2. 在VS:点击编辑>粘贴特殊>将JSON粘贴为类

这里有一个更好的解释piccas…https://blogs.msdn.microsoft.com/webdev/2012/12/18/paste - json - -类- - asp -网-和- web -工具- 2012 - 2 rc/

结果看起来是一个对象数组,而不是数组本身。尝试将id设置为results["id"][0].Value,看看是否得到一些东西。

请参阅:访问的JArray值具有无效的键值:"fields"。数组位置索引

相关内容

  • 没有找到相关文章

最新更新