[英]Accessing deeply nested JSON objects in c# using NewtonSoft Deserialization
[英]How to access a collection in C# using Newtonsoft JSON deserialization
我有一個C#控制台應用程序從Web API獲取json。 使用Newtonsoft JSON反序列化,我成功地成功提取了數據,但是例如無法訪問data[0]
。
我的代碼:
internal class Program
{
private static void Main()
{ // TODO: check if HttpWebRequest can replace WebRequest.Create
var webRequest = WebRequest.Create("http://api.giphy.com/v1/gifs/search?q=" + "cute cat" + "&api_key=...") as HttpWebRequest;
if (webRequest == null)
{
return;
}
webRequest.ContentType = "application/json";
webRequest.UserAgent = "Nothing";
using (var s = webRequest.GetResponse().GetResponseStream())
{
using (var sr = new StreamReader(s))
{
var Json = sr.ReadToEnd(); // json response from web api request
dynamic data = JsonConvert.DeserializeObject(Json); // json to c# objects
//(data.images).ForEach(Console.WriteLine);
System.Console.WriteLine(data);
}
}
Console.ReadLine();
}
}
但是當嘗試訪問data[0]
我得到:
System.ArgumentException: 'Accessed JObject values with invalid key value: 0. Object property name expected.'
我也試過沒有dynamic
與json2csharp的幫助,也不能工作。
非常簡短的答案是JArray 。
我只是檢查,甚至有是如何在這里使用它SO,例如實例如何訪問一個JArray的元素
但是 ,由於您沒有提供要反序列化的數據,因此無法確定JArray是否可以解決您的問題。
響應是一個具有數組data
屬性的對象。 您不能使用整數(只能使用字符串)訪問對象的屬性。
您應該注意響應的實際效果,不要猜測。
您可能想要做這樣的事情:
dynamic response = JsonConvert.DeserializeObject(Json);
foreach (var data in response.data)
{
Console.WriteLine(data.images);
}
嘗試這個..
var dataList=JsonConvert.DeserializeObject<List<ClassModel>>(data.ToString());
ClassModel
應該是與從api作為響應發送的對象等效的類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.