我有一个C#控制台应用程序,可从Web API获取json。使用Newtonsoft JSON反序列化,我成功地设法提取了数据,但是例如无法访问service.impl
。
我的代码:
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.'
的情况下也无法使用的json2csharp。
答案 0 :(得分:0)
非常简短的答案是JArray。
我刚刚检查了一下,甚至还有一些如何在SO上使用它的示例,例如在How to access elements of a JArray
但是,由于您没有提供要反序列化的数据,因此无法确定JArray是否可以解决您的问题。
答案 1 :(得分:0)
响应是一个对象,该对象具有数组的data
属性。您不能使用整数(只能使用字符串)访问对象的属性。
您应该注意响应的实际效果,不要猜测。
您可能想要做这样的事情:
dynamic response = JsonConvert.DeserializeObject(Json);
foreach (var data in response.data)
{
Console.WriteLine(data.images);
}
答案 2 :(得分:0)
尝试一下。
var dataList=JsonConvert.DeserializeObject<List<ClassModel>>(data.ToString());
ClassModel
应该是与从api作为响应发送的对象等效的类。