Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
 Аватар для AnastasiaSX
53 / 31 / 4
Регистрация: 19.12.2013
Сообщений: 170

Десериализация файла json с использованием Dictionary

05.06.2020, 23:48. Показов 1799. Ответов 2

Студворк — интернет-сервис помощи студентам
Есть файл json, его нужно десериализовать и поместить в class чтобы потом с этим класом работать. Но увы только часть переменных помещается переменные, а в словаре Dictionary пусто. Как заполнить словарь и потом читать из него данные?
Очень желательно сделать работу программы БЕЗ сторонней библиотеки от newtonsoft.

JSON
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
{
    "status": "OK",
    "status_code": 100,
    "sms": {
        "79785000000": {
            "status": "OK",
            "status_code": 100,
            "sms_id": "202020-1000003",
            "cost": "0.00"
        },
        
        "79785000001": {
            "status": "Bad",
            "status_code": 105,
            "sms_id": "202020-1000004",
            "cost": "0.00"
        },
        
        "79785000002": {
            "status": "Bad",
            "status_code": 106,
            "sms_id": "202020-1000005",
            "cost": "1.50"
        }
        
    },
    "balance": 5.02
}
код для десериализации который говорит что нет ключей вообще (в foreach не заходит) но можно получить часть других данных например переменную balance или status_code:
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
using System;
using System.Linq;
using System.Text;
using System.IO;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
 
namespace sms
{
    class mainProgram
    {
        static int Main(string[] args) 
        {
            string sms_ansver     = "{ \"status\": \"OK\", \"status_code\": 100, \"sms\": { \"79785000000\": { \"status\": \"OK\", \"status_code\": 100, \"sms_id\": \"202020-1000003\", \"cost\": \"0.00\" }, \"79785000001\": { \"status\": \"Bad\", \"status_code\": 105, \"sms_id\": \"202020-1000004\", \"cost\": \"0.00\" }, \"79785000002\": { \"status\": \"Bad\", \"status_code\": 106, \"sms_id\": \"202020-1000005\", \"cost\": \"1.50\" } }, \"balance\": 5.02 } ";
 
            byte[] byte_sms       = System.Text.Encoding.Unicode.GetBytes(sms_ansver);
            var    sms_ansverMem  = new MemoryStream(byte_sms);
            var ser_sms           = new DataContractJsonSerializer(typeof(sms_ru_answer));
            var all_sms_class     = (sms_ru_answer)ser_sms.ReadObject(sms_ansverMem);
 
            if(all_sms_class.sms.ContainsKey("79785000000")) 
            {
               Console.WriteLine("Есть ключ 79785000000 и значение sms_id = " + all_sms_class.sms["79785000000"].sms_id); // сюда не заходит вообще
            }
            else
            {
                Console.WriteLine("Нет ключа 79785000000");
                Console.WriteLine("Но другие данные можно вытащить, например баланс: " + all_sms_class.balance);
            }
            
            foreach(KeyValuePair<string, one_phone_status> kvp in all_sms_class.sms)
                Console.WriteLine("Key: " + kvp.Key);     // тут вообще ничего нет, почему?
 
            return 0;  
        } 
             
   } 
 
    public class one_phone_status
    {
        public string status      { get; set; }
        public int    status_code { get; set; }
        public string sms_id      { get; set; }
        public string cost        { get; set; }
    }
    
    public class sms_ru_answer
    {
        public string status          { get; set; }
        public int    status_code     { get; set; }
        public Dictionary<string, one_phone_status> sms { get; set; } 
        public double balance         { get; set; }
    }
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.06.2020, 23:48
Ответы с готовыми решениями:

Десериализация JSON из ВК без JSON.NET
JSON: { &quot;response&quot; : } Мой код: string json = тут текст из спойлера вначале; JavaScriptSerializer jser = new...

Десериализация JSON
Приветствую всех. Пытаюсь в C#. Решил попробовать в запросы и API. Начал с VK. Ну и тут сразу проблема. {&quot;response&quot;: Есть...

Json, десериализация
Здравствуйте, помогите пожалуйста. Пытаюсь десериализовать Json (использую System.Runtime.Serialization), вот такого вида (продуктов может...

2
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
06.06.2020, 00:05
Лучший ответ Сообщение было отмечено AnastasiaSX как решение

Решение

С Newtonsoft всё прекрасно работает...
C#
1
2
3
string sms_ansver     = "{ \"status\": \"OK\", \"status_code\": 100, \"sms\": { \"79785000000\": { \"status\": \"OK\", \"status_code\": 100, \"sms_id\": \"202020-1000003\", \"cost\": \"0.00\" }, \"79785000001\": { \"status\": \"Bad\", \"status_code\": 105, \"sms_id\": \"202020-1000004\", \"cost\": \"0.00\" }, \"79785000002\": { \"status\": \"Bad\", \"status_code\": 106, \"sms_id\": \"202020-1000005\", \"cost\": \"1.50\" } }, \"balance\": 5.02 } ";
 
var all_sms_class = JsonConvert.DeserializeObject<sms_ru_answer>(sms_ansver);
Стандартная библиотека лажа, но её можно пофиксить вот так

C#
1
var ser_sms = new DataContractJsonSerializer(typeof(sms_ru_answer), new DataContractJsonSerializerSettings() { UseSimpleDictionaryFormat = true });
1
 Аватар для AnastasiaSX
53 / 31 / 4
Регистрация: 19.12.2013
Сообщений: 170
06.06.2020, 19:15  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
Стандартная библиотека лажа, но её можно пофиксить вот так
Спасибо, это было решением проблемы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.06.2020, 19:15
Помогаю со студенческими работами здесь

Десериализация Json
Всем здравия! не получается десереализовать Json в DTO. Использую NewtonJson последний. Что не так делаю-то? private static void...

json десериализация
Всем добрый день, в общем я создал обьект JsonNode,заполняю его разными значениями,потом произвожу десериализацию по типу Object body...

Десериализация json
Всем привет, следующая проблема возникла, имеется следующий json: {&quot;data&quot;: {&quot;user&quot;: {&quot;edge_followed_by&quot;: {&quot;count&quot;: 526,...

JSON десериализация
Как корректно десериализовать что-то вроде такого? &quot;А&quot;: числоА, &quot;Б&quot;: числоБ, &quot;С&quot;: &quot;D&quot;: ], ...

Десериализация JSON'a
Добрый день! Ищу помощи) Имею вот такой JSON { &quot;Classes&quot;: }


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru