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

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

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

Author24 — интернет-сервис помощи студентам
Добрый день! Столкнулся с ошибкой разбора json
Необработанное исключение типа "Newtonsoft.Json.JsonSerializationException" в 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.08.2020, 12:04
Ответы с готовыми решениями:

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

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

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

Класс для десериализации 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.04......

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

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

C#
1
var list = JsonConvert.DeserializeObject<List<MyArray>>(json);
2
32 / 14 / 6
Регистрация: 11.04.2014
Сообщений: 238
14.08.2020, 14:32  [ТС] 8
TrickyBestia,
Ошибка десериализации JSON
0
32 / 14 / 6
Регистрация: 11.04.2014
Сообщений: 238
14.08.2020, 14:46  [ТС] 9
я уже прям "запарился" с этим разбором... всякие варианты разные перебирал и все равно не выходит.
0
Эксперт .NET
6505 / 4082 / 1605
Регистрация: 09.05.2015
Сообщений: 9,546
14.08.2020, 15:29 10
Лучший ответ Сообщение было отмечено 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
Сообщений: 238
14.08.2020, 15:34  [ТС] 11
Someone007, Спасибо!
Я затупил все дело было указании на массив [] и все
var data = JsonConvert.DeserializeObject<Class1[]>(json);
0
14.08.2020, 15:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.08.2020, 15:34
Помогаю со студенческими работами здесь

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

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

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

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

Ошибка сериализации/десериализации
Подскажите что не так? private void button3_Click(object sender, EventArgs e) { ...

Ошибка при десериализации
Пробую считать XML документ. в try catch выдаёт ошибку - There is an Error in XML document (2,2)...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru