我第一次使用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",这样可以快速轻松地反序列化。
- 简单复制整个JSON
- 在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"。数组位置索引