我在使用API时遇到问题,第一次使用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"
},
]
答案 0 :(得分:2)
您的回复是一个数组而不是一个对象。所以你应该使用
JArray results = JArray.Parse(responseData)
解析结果(如results[0]["id"]
)。如果你采取动态的方式,那么
dynamic results = JArray.Parse(responseData)
现在,您可以像results[0].id
答案 1 :(得分:1)
另一个选择是&#34;粘贴JSON作为类&#34;因此可以快速简便地进行反序列化。
这是一个更好的解释n piccas ... https://blogs.msdn.microsoft.com/webdev/2012/12/18/paste-json-as-classes-in-asp-net-and-web-tools-2012-2-rc/
答案 2 :(得分:0)
您的结果似乎是一个对象数组,而不是数组本身。尝试将id
设置为results["id"][0].Value
并查看是否有所收获。
请参阅:Accessed JArray values with invalid key value: "fields". Array position index expected