Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
32 / 14 / 6
Регистрация: 11.04.2014
Сообщений: 240

Ошибка десериализации JSON

14.08.2020, 12:04. Показов 3663. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Столкнулся с ошибкой разбора json
Необработанное исключение типа "Newtonsoft.Json.JsonSerializationExcept ion" в Newtonsoft.Json.dll
Дополнительные сведения: Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'Form1' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.
Классы генерировал сервисом https://json2csharp.com/
Я не могу понять, что не сходится в классах? Кто может помочь указать в чем ошибка?

C#
1
var des = (Kkm)Newtonsoft.Json.JsonConvert.DeserializeObject(result, typeof(Kkm));
Вот классы

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
public class FiscalDrive
        {
            public string producer { get; set; }
            public string number { get; set; }
            public object activationDate { get; set; }
        }
 
        public class LastShift
        {
            public string kkmId { get; set; }
            public object updateDate { get; set; }
            public int shiftNumber { get; set; }
            public double sells { get; set; }
            public int returns { get; set; }
            public object lastTransaction { get; set; }
            public bool shiftClosed { get; set; }
            public bool fiscalDriveReplaceRequired { get; set; }
            public bool fiscalDriveMemoryExceeded { get; set; }
            public bool fiscalDriveExhausted { get; set; }
            public int fiscalDocumentsCount { get; set; }
            public string lastTransactionType { get; set; }
        }
 
        public class Kkm
        {
            public int id { get; set; }
            public int orgId { get; set; }
            public int retailPlaceId { get; set; }
            public string internalName { get; set; }
            public string model { get; set; }
            public string serialNumber { get; set; }
            public int onlineStatus { get; set; }
            public int status { get; set; }
            public object createdAt { get; set; }
            public string declineReason { get; set; }
            public string fnsKkmId { get; set; }
            public string regStatus { get; set; }
            public object regStatusChangedAt { get; set; }
            public FiscalDrive fiscalDrive { get; set; }
            public LastShift lastShift { get; set; }
        }
 
        public class MyArray
        {
            public int id { get; set; }
            public string title { get; set; }
            public string address { get; set; }
            public double longitude { get; set; }
            public double latitude { get; set; }
            public List<Kkm> kkms { get; set; }
            public int kkmsOnlineCount { get; set; }
        }
 
        public class Root_S
        {
            public List<MyArray> MyArray { get; set; }
        }
вид json

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
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
75
76
77
78
79
80
[
    {
        "id": 7542826,
        "title": "Адрес 140",
        "address": "Адрес 140",
        "longitude": 05.961548,
        "latitude": 04.742206,
        "kkms": [
            {
                "id": 65231138,
                "orgId": 3122,
                "retailPlaceId": 7128126123,
                "internalName": "000423532061244",
                "model": "ZR2",
                "serialNumber": "0364589429",
                "onlineStatus": 1,
                "status": 4,
                "createdAt": 1580367599792,
                "declineReason": "",
                "fnsKkmId": "15975313354061244",
                "regStatus": "REGISTRATION_SUCCESS",
                "regStatusChangedAt": 165465370307890,
                "fiscalDrive": {
                    "producer": "",
                    "number": "54165453465469161",
                    "activationDate": 1580367540000
                },
                "lastShift": {
                    "kkmId": "5275257275061244",
                    "updateDate": 1752752752396335,
                    "shiftNumber": 187243,
                    "sells": 8895.61,
                    "returns": 0,
                    "lastTransaction": 1597252577410360000,
                    "shiftClosed": false,
                    "fiscalDriveReplaceRequired": false,
                    "fiscalDriveMemoryExceeded": false,
                    "fiscalDriveExhausted": false,
                    "fiscalDocumentsCount": 47,
                    "lastTransactionType": "TICKET"
                }
            },
            {
                "id": 657765130,
                "orgId": 3122,
                "retailPlaceId": 7128126123,
                "internalName": "000433185565000601",
                "model": "ZR2",
                "serialNumber": "08388284512361",
                "onlineStatus": 0,
                "status": 4,
                "createdAt": 1584534534534507,
                "declineReason": "",
                "fnsKkmId": "0004534534534530601",
                "regStatus": "REGISTRATION_SUCCESS",
                "regStatusChangedAt": 15453453453890,
                "fiscalDrive": {
                    "producer": "",
                    "number": "45354345354345566357",
                    "activationDate": 4534534534560000
                },
                "lastShift": {
                    "kkmId": "45354345345300601",
                    "updateDate": 1596094816137,
                    "shiftNumber": 1611,
                    "sells": 0,
                    "returns": 0,
                    "lastTransaction": 1597252577410360000,
                    "shiftClosed": false,
                    "fiscalDriveReplaceRequired": false,
                    "fiscalDriveMemoryExceeded": false,
                    "fiscalDriveExhausted": false,
                    "fiscalDocumentsCount": 0,
                    "lastTransactionType": "OPEN_SHIFT"
                }
            }
        ],
        "kkmsOnlineCount": 2
    }
]
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.08.2020, 12:04
Ответы с готовыми решениями:

При десериализации JSON из файла происходит ошибка
using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Runtime.Serialization; using...

Ошибка при десериализации json файла в list
Здравствуйте. У меня проблема с десериализации. Вот таким способом я делаю: var json = new...

Ошибка при десериализации JSON: отсутствует открытое определение экземпляра для GetEnumerator
Здравствуйте, не удается перебрать foreachom значения. Возникает следующая ошибка: Оператор foreach не может использоваться для переменных...

10
Пора на C++?
 Аватар для TrickyBestia
370 / 264 / 99
Регистрация: 10.04.2020
Сообщений: 1,275
14.08.2020, 12:40
vitamin4ik, классы я не смотрел, т.к. у вас в тексте ошибки написано, что json десериализуете в объект Form1. Вы видимо что-то перепутали.
0
1519 / 486 / 126
Регистрация: 09.01.2018
Сообщений: 1,272
14.08.2020, 12:41
vitamin4ik, В JSON у вас массив Kkm, а вы его десериализуете как один объект Kkm.
0
Пора на C++?
 Аватар для TrickyBestia
370 / 264 / 99
Регистрация: 10.04.2020
Сообщений: 1,275
14.08.2020, 12:48
vitamin4ik, пишите так:
C#
1
var des = Newtonsoft.Json.JsonConvert.DeserializeObject<Root_S>(result);
У вас кстати текст ошибки с кодом не сходится
0
32 / 14 / 6
Регистрация: 11.04.2014
Сообщений: 240
14.08.2020, 14:18  [ТС]
TrickyBestia, дело не в этом. Так уже пробовал )
Ошибка возникает сразу на этом шаге
C#
1
 var des = (Root_S)Newtonsoft.Json.JsonConvert.DeserializeObject(result, typeof(Root_S));
не переходя дальше

escoult, Можете показать, как правильно? что именно исправить ?
0
Пора на C++?
 Аватар для TrickyBestia
370 / 264 / 99
Регистрация: 10.04.2020
Сообщений: 1,275
14.08.2020, 14:23
vitamin4ik, ошибку скиньте.
0
1519 / 486 / 126
Регистрация: 09.01.2018
Сообщений: 1,272
14.08.2020, 14:30
Цитата Сообщение от vitamin4ik Посмотреть сообщение
escoult, Можете показать, как правильно? что именно исправить ?
Да, конечно. Только поправлю себя, это массив MyArray, а не массив Kkm. Я не внимательно посмотрел первый раз.

C#
1
var list = JsonConvert.DeserializeObject<List<MyArray>>(json);
2
32 / 14 / 6
Регистрация: 11.04.2014
Сообщений: 240
14.08.2020, 14:32  [ТС]
TrickyBestia,
0
32 / 14 / 6
Регистрация: 11.04.2014
Сообщений: 240
14.08.2020, 14:46  [ТС]
я уже прям "запарился" с этим разбором... всякие варианты разные перебирал и все равно не выходит.
0
Эксперт .NET
6525 / 4101 / 1606
Регистрация: 09.05.2015
Сообщений: 9,564
14.08.2020, 15:29
Лучший ответ Сообщение было отмечено vitamin4ik как решение

Решение

Для начала у вас json кривой, там числа записаны не по стандарту...

https://www.ietf.org/rfc/rfc4627.txt
2.4. Numbers
...
Octal and hex forms are not allowed. Leading zeros are not allowed.
JSON
1
2
        "longitude": 05.961548,
        "latitude": 04.742206,
0 в начале запрещен.

Если это исправить удалив 0 в начале, то все прекрасно десериализуется...
C#
1
            var data = JsonConvert.DeserializeObject<Class1[]>(json);
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
    public class Class1
    {
        public int id { get; set; }
        public string title { get; set; }
        public string address { get; set; }
        public float longitude { get; set; }
        public float latitude { get; set; }
        public Kkm[] kkms { get; set; }
        public int kkmsOnlineCount { get; set; }
    }
 
    public class Kkm
    {
        public int id { get; set; }
        public int orgId { get; set; }
        public long retailPlaceId { get; set; }
        public string internalName { get; set; }
        public string model { get; set; }
        public string serialNumber { get; set; }
        public int onlineStatus { get; set; }
        public int status { get; set; }
        public long createdAt { get; set; }
        public string declineReason { get; set; }
        public string fnsKkmId { get; set; }
        public string regStatus { get; set; }
        public long regStatusChangedAt { get; set; }
        public Fiscaldrive fiscalDrive { get; set; }
        public Lastshift lastShift { get; set; }
    }
 
    public class Fiscaldrive
    {
        public string producer { get; set; }
        public string number { get; set; }
        public long activationDate { get; set; }
    }
 
    public class Lastshift
    {
        public string kkmId { get; set; }
        public long updateDate { get; set; }
        public int shiftNumber { get; set; }
        public float sells { get; set; }
        public int returns { get; set; }
        public long lastTransaction { get; set; }
        public bool shiftClosed { get; set; }
        public bool fiscalDriveReplaceRequired { get; set; }
        public bool fiscalDriveMemoryExceeded { get; set; }
        public bool fiscalDriveExhausted { get; set; }
        public int fiscalDocumentsCount { get; set; }
        public string lastTransactionType { get; set; }
    }
1
32 / 14 / 6
Регистрация: 11.04.2014
Сообщений: 240
14.08.2020, 15:34  [ТС]
Someone007, Спасибо!
Я затупил все дело было указании на массив [] и все
var data = JsonConvert.DeserializeObject<Class1[]>(json);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.08.2020, 15:34
Помогаю со студенческими работами здесь

Класс для десериализации Json
{&quot;btc_usdt&quot;:{&quot;result&quot;:&quot;true&quot;,&quot;last&quot;:8565,&quot;lowestAsk&quot;:8569,&quot;highestBid&quot;:8509.36,&quot;percentChange&quot;:-8.046862156386,&quot;baseVolume&quot;:4948076.7,&quot;quote...

Получение данных после десериализации JSON
Пытался найти способ десериализовывать json без добавления лишних структур в проект (как это делается в newtonsoft) при помощи динамичных...

Верификация файла .json и .xml при десериализации
Собственно проблема такая: нужно обработать импорт некорректного файла. Файлы содержат объекты базового класса собранные в...

Сделать генерацию исключения во время десериализации json
Здравствуйте Есть такой класс: class Message { public int intField; } И такой json:

Ошибка десериализации
Добрый день! Есть синглтон-класс Settings, обладающий свойством Lang, при установке значения которого генерируется событие SettingsChanged....


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Трассировка корутин Kotlin с OpenTelemetry
mobDevWorks 14.07.2025
Асинхронное программирование меняет правила игры, особенно когда речь заходит о трассировке операций. В Kotlin с его корутинами эта проблема приобретает особый оттенок, который я хотел бы детально. . .
Облачные приложения на Rust: руководство по архитектуре микросервисов
golander 13.07.2025
Когда я впервые взялся за проектирование облачной платформы для одного из наших клиентов, выбор стоял между привычными Go и Java. Но после нескольких месяцев разработки микросервисной системы,. . .
Как Node.js выполняет асинхронные операции
Reangularity 13.07.2025
Каждый раз, когда я рассказываю про Node. js, возникает один и тот же вопрос: "Как эта штука может быть быстрой, если JavaScript — однопоточный язык?" И это действительно кажется парадоксом. Ведь в. . .
Как писать чистый, тестируемый и качественный код на Python
py-thonny 12.07.2025
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как. . .
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru