簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM