Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 08.09.2021
Сообщений: 98

Десериализация JSON

06.06.2022, 22:38. Показов 1473. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делая запрос на сервер я получаю
JSON
1
{"data":[{"id":"45532522876","user_id":"182190215","user_login":"shieldhub","user_name":"ShieldHub","game_id":"27471","game_name":"Minecraft","type":"live","title":"Следим за SubShield! | !mineshield | !subshield | !discord","viewer_count":62,"started_at":"2022-06-05T21:38:10Z","language":"ru","thumbnail_url":"https://static-cdn.jtvnw.net/previews-ttv/live_user_shieldhub-{width}x{height}.jpg","tag_ids":["0569b171-2a2b-476e-a596-5bdfb45a1327"],"is_mature":false}],"pagination":{}}
И из этого мне надо вытащить в string: user_name, game_name, type, title, started_at
Пытался сделать, но кидало в исключения
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
            WebClient wc = new WebClient();
            Console.Write("Streamer name: ");
            string streamer = Console.ReadLine();
            string json = wc.DownloadString($"https://fan9.ru/api/getStreamInfo.php?channel={streamer}");
            if (!(json.Contains("type")))
            {
                Console.WriteLine("Not live");
                Console.ReadKey();
            }
            else
            {
                dynamic deserializeJson = JsonConvert.DeserializeObject(json);
                string gameName = deserializeJson.data.game_name;
                Console.WriteLine(gameName);
                Console.ReadKey();
            }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.06.2022, 22:38
Ответы с готовыми решениями:

Десериализация JSON
Как для такого формата класс создать? , , ] исп. Newtonsoft.Json var myclass =...

Десериализация JSON
Есть данные от известного источника в JSON: {"response":} При помощи Newtonsoft.Json они успешно распарсиваются в структуру: public...

Не работает десериализация JSON
У меня есть класс Doctor который принимает значение: public class Doctor { public string doctorsId { get; set; } ...

15
643 / 338 / 139
Регистрация: 19.10.2013
Сообщений: 1,209
06.06.2022, 23:30
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 public class Root
    {
        [JsonPropertyName("data")]
        public List<Data> Items { get; set; }
    }
 
    public class Data
    {
        [JsonPropertyName("id")]
        public string Id { get; set; }
 
        [JsonPropertyName("user_id")]
        public string User_id { get; set; }
 
        [JsonPropertyName("user_login")]
        public string User_login { get; set; }
 
        [JsonPropertyName("user_name")]
        public string User_name { get; set; }
 
        [JsonPropertyName("game_id")]
        public string Game_id { get; set; }
 
        [JsonPropertyName("game_name")]
        public string Game_name { get; set; }
 
        [JsonPropertyName("type")]
        public string Type { get; set; }
 
        [JsonPropertyName("title")]
        public string Title { get; set; }
 
        [JsonPropertyName("viewer_count")]
        public Int64 Viewer_count { get; set; }
 
        [JsonPropertyName("started_at")]
        public DateTime Started_at { get; set; }
 
        [JsonPropertyName("language")]
        public string Language { get; set; }
 
        [JsonPropertyName("thumbnail_url")]
        public string Thumbnail_url { get; set; }
 
        [JsonPropertyName("tag_ids")]
        public Guid[] Tag_ids { get; set; }
 
        [JsonPropertyName("is_mature")]
        public bool Is_mature { get; set; }
 
    }
Добавлено через 16 секунд
вызывать так
C#
1
2
3
4
5
6
7
8
9
10
11
 Console.Write("Streamer name: ");
            string streamer = Console.ReadLine();
 
            Root deserializedObj = new Root();
 
            using (WebClient wc = new WebClient())
            {
                string json = wc.DownloadString($"https://fan9.ru/api/getStreamInfo.php?channel={streamer}");
 
                deserializedObj = JsonSerializer.Deserialize<Root>(json);
            }
0
 Аватар для sau
2773 / 2073 / 386
Регистрация: 22.07.2011
Сообщений: 7,820
07.06.2022, 08:47
Цитата Сообщение от fan91 Посмотреть сообщение
string gameName = deserializeJson.data.game_name;
data это массив , по этому eserializeJson.data[index].game_name;
0
1 / 1 / 0
Регистрация: 08.09.2021
Сообщений: 98
07.06.2022, 13:57  [ТС]
ошибка не удается преобразовать из "string" в "Newtonsoft.Json.JsonReader".
0
1 / 1 / 0
Регистрация: 08.09.2021
Сообщений: 98
07.06.2022, 22:50  [ТС]
да и еще, как это разбить по string? чтобы было так:
C#
1
 Console.WriteLine($"Играет в игру {game_name}, название - {title}, Количество зрителей {viewer_count}");
0
643 / 338 / 139
Регистрация: 19.10.2013
Сообщений: 1,209
07.06.2022, 22:54
fan91, а вы какой вариант используете? предложенный мною или sau?
0
1 / 1 / 0
Регистрация: 08.09.2021
Сообщений: 98
07.06.2022, 22:55  [ТС]
все переписал так, как вы кинули
0
643 / 338 / 139
Регистрация: 19.10.2013
Сообщений: 1,209
07.06.2022, 22:57
fan91, тогда в класс Data добавьте
C#
1
2
3
4
   public override string ToString()
        {
            return ($"Играет в игру {Game_name}, название - {Title}, Количество зрителей {Viewer_count}");
        }

и в Console.WriteLine для объекта класса Data вызывать ToString
0
1 / 1 / 0
Регистрация: 08.09.2021
Сообщений: 98
08.06.2022, 10:23  [ТС]
Сделал так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
 public static void Main(string[] args)
        {
            Console.Write("Streamer name: ");
            string streamer = Console.ReadLine();
 
            Root deserializedObj = new Root();
            Data data = new Data();
 
            using (WebClient wc = new WebClient())
            {
                var json = wc.DownloadString($"https://fan9.ru/api/getStreamInfo.php?channel={streamer}");
 
                deserializedObj = JsonConvert.DeserializeObject<Root>(json);
                string game = data.ToString();
                Console.WriteLine(game);
                Console.ReadKey();
            }
        }
    }
    public class Root
    {
        [JsonPropertyName("data")]
        public List<Data> Items { get; set; }
    }
 
    public class Data
    {
        [JsonPropertyName("id")]
        public string Id { get; set; }
 
        [JsonPropertyName("user_id")]
        public string User_id { get; set; }
 
        [JsonPropertyName("user_login")]
        public string User_login { get; set; }
 
        [JsonPropertyName("user_name")]
        public string User_name { get; set; }
 
        [JsonPropertyName("game_id")]
        public string Game_id { get; set; }
 
        [JsonPropertyName("game_name")]
        public string Game_name { get; set; }
 
        [JsonPropertyName("type")]
        public string Type { get; set; }
 
        [JsonPropertyName("title")]
        public string Title { get; set; }
 
        [JsonPropertyName("viewer_count")]
        public Int64 Viewer_count { get; set; }
 
        [JsonPropertyName("started_at")]
        public DateTime Started_at { get; set; }
 
        [JsonPropertyName("language")]
        public string Language { get; set; }
 
        [JsonPropertyName("thumbnail_url")]
        public string Thumbnail_url { get; set; }
 
        [JsonPropertyName("tag_ids")]
        public Guid[] Tag_ids { get; set; }
 
        [JsonPropertyName("is_mature")]
        public bool Is_mature { get; set; }
        public override string ToString()
        {
            return ($"Играет в игру {Game_name}, название - {Title}, Количество зрителей {Viewer_count}");
        }
 
    }
но он возвращает Играет в игру , название - , Количество зрителей 0
хотя ответ выглядит по другому
JSON
1
{"data":[{"id":"39494114712","user_id":"182190215","user_login":"shieldhub","user_name":"ShieldHub","game_id":"27471","game_name":"Minecraft","type":"live","title":"Следим за SubShield! | !mineshield | !subshield | !discord","viewer_count":55,"started_at":"2022-06-07T18:40:16Z","language":"ru","thumbnail_url":"https://static-cdn.jtvnw.net/previews-ttv/live_user_shieldhub-{width}x{height}.jpg","tag_ids":["0569b171-2a2b-476e-a596-5bdfb45a1327"],"is_mature":false}],"pagination":{}}
0
643 / 338 / 139
Регистрация: 19.10.2013
Сообщений: 1,209
08.06.2022, 10:39
ну так в data ничего и не может прийти, эта переменная просто объявлена и все, где присваивание ей какого либо значения? кроме инициализации.
C#
1
deserializedObj.Items[0].ToString()
- так правильно
0
1 / 1 / 0
Регистрация: 08.09.2021
Сообщений: 98
08.06.2022, 13:17  [ТС]
я вместо
C#
1
2
3
4
5
6
7
8
9
            using (WebClient wc = new WebClient())
            {
                var json = wc.DownloadString($"https://fan9.ru/api/getStreamInfo.php?channel={streamer}");
 
                deserializedObj = JsonConvert.DeserializeObject<Root>(json);
                string game = data.ToString();
                Console.WriteLine(game);
                Console.ReadKey();
            }
поставил так
C#
1
2
3
4
5
6
7
8
9
            using (WebClient wc = new WebClient())
            {
                var json = wc.DownloadString($"https://fan9.ru/api/getStreamInfo.php?channel={streamer}");
 
                deserializedObj = JsonConvert.DeserializeObject<Root>(json);
                string game = deserializedObj.Items[0].ToString();
                Console.WriteLine(game);
                Console.ReadKey();
            }
оно возвращает null, что выдает исключение.
0
643 / 338 / 139
Регистрация: 19.10.2013
Сообщений: 1,209
08.06.2022, 13:50
ну смотрите отладчиком тогда,в чем дело, у меня все работает.
0
1 / 1 / 0
Регистрация: 08.09.2021
Сообщений: 98
08.06.2022, 13:52  [ТС]
можете скинуть полный рабочий код? я посмотрю что не так у меня
0
643 / 338 / 139
Регистрация: 19.10.2013
Сообщений: 1,209
08.06.2022, 13:56
C#
1
2
3
4
5
6
7
8
Console.Write("Streamer name: ");
            string streamer = Console.ReadLine();
Root deserializedObj = new Root();
using (WebClient wc = new WebClient())
            {
                string json = wc.DownloadString($"https://fan9.ru/api/getStreamInfo.php?channel={streamer}");
deserializedObj = JsonSerializer.Deserialize<Root>(json);
            }
0
1 / 1 / 0
Регистрация: 08.09.2021
Сообщений: 98
08.06.2022, 16:07  [ТС]
Возникает ошибка
- CS1503 Аргумент 1: не удается преобразовать из "string" в "Newtonsoft.Json.JsonReader"

Добавлено через 28 секунд
на строке
C#
1
deserializedObj = JsonSerializer.Deserialize<Root>(json);
0
643 / 338 / 139
Регистрация: 19.10.2013
Сообщений: 1,209
08.06.2022, 16:23
C#
1
2
using System.Text.Json;
using System.Text.Json.Serialization;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.06.2022, 16:23
Помогаю со студенческими работами здесь

Десериализация Newtonsoft.Json
Возникла жизненная необходимость сохранять текущее состояние с возможностью снова восстановиться к нему. В моём коде происходит...

System.Text.Json десериализация
Необходимо преобразовать из jSon в объект и дальше работать с этими данными. Думаю проблема либо в описании класса либо в неверном...

Десериализация Json - как правильно?
Накатал простой пример - using System; using Newtonsoft.Json; using Newtonsoft; namespace json_test { class...

Десериализация JSON ничего не выводит
Здравствуйте, подскажите что делаю не так. Смотрел мануалы и у всех все работает а у меня выводит пустоту. if...

Десериализация из Json дает пустую строку
Создаю 2 файла ,один с запросом, второй с обработкой. using System; using System.IO; using System.Net; using System.Threading; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru