如何使用Newtonsoft JSON反序列化在C#中访问集合

时间:2018-09-05 06:49:29

标签: c# json json.net

我有一个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。

3 个答案:

答案 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作为响应发送的对象等效的类。