#c# #.net #json #visual-studio-2015 #deserialization
#c# #.net #json #visual-studio-2015 #десериализация
Вопрос:
Я пытаюсь вывести JSON в выпадающий список в веб-форме. Мне удалось зайти так далеко:
WebClient client = new WebClient();
string getString = client.DownloadString("http://myfeed.com/app_feed.php");
JavaScriptSerializer serializer = new JavaScriptSerializer();
dynamic item = serializer.Deserialize<object>(getString);
string name = item["title"];
return name;
Это возвращает канал нормально, но в строке возникает ошибка:
string name = item["title"];
Возвращая эту ошибку:
Дополнительная информация: данный ключ отсутствовал в словаре.
Это образец моего канала:
{"apps":[{"title":"title1","description":"description1"},
{"title":"title2","description":"description2"},
{"title":"title3","description":"description3"}
Итак, я подумал, что ссылаюсь на первый заголовок, и я планировал перебрать их:
string name = item["title"];
Но, очевидно, нет!
Я просмотрел Stackoverflow, но не могу найти ответ, который я мог бы применить к своему собственному коду.
Комментарии:
1. Только предложение: вместо десериализации вашего JSON в
dynamic
объект я бы рекомендовал вам создать несколько строго типизированных классов C #, с которыми вы можете работать и выполнять итерации. Вы можете использовать json2csharp.com чтобы помочь вам в этом, или встроенный инструмент в VS >Edit
>Paste Special
>Paste JSON As Classes
🙂2. ‘]}’ отсутствует в ленте примеров. это полный канал?
3. Я думаю, что это просто опечатка @Arshad
Ответ №1:
title
находится внутри другого ключа apps
и является массивом, поэтому вы должны повторить его, я покажу вам, просто выберите первый, используя индекс 0
string name = item["apps"][0]["title"];
вы можете получить доступ ко всем с помощью foreach
foreach (var ap in item["apps"])
{
Console.WriteLine(ap["title"]);
}
Ответ №2:
Во-первых, ваш JSON недействителен. Второе: вам нужно перебирать свои элементы, так как это массив. Если вы хотите получить доступ к первому, вы могли бы сделать: item["apps"][0]["title"]
Перебор всех элементов:
var str = @"{""apps"":[{""title"":""title1"",""description"":""description1""},
{""title"":""title2"",""description"":""description2""},
{""title"":""title3"",""description"":""description3""}]}";
var serializer = new JavaScriptSerializer();
dynamic obj = serializer.Deserialize<object>(str);
foreach (var item in obj["apps"])
{
Console.WriteLine("item title: " item["title"]);
}