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

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

14.08.2020, 12:04. Показов 4022. Ответов 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
1524 / 515 / 126
Регистрация: 09.01.2018
Сообщений: 1,614
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
1524 / 515 / 126
Регистрация: 09.01.2018
Сообщений: 1,614
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
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru