Ошибка десериализации что это

Бывают ситуации, когда пользователь программы 1С сталкивается с появлением ошибки – «Ошибка десериализации контактной информации не указан ожидаемый тип». Возникает она в основном при переходе на новую редакцию программы или обновлении конфигурации и связана с некорректной конвертацией справочника «Виды контактной информации», а появляется при попытке занести данные.

Данные «Контактная информация» задействованы в справочниках «Организация», «Подразделения организации», «Контрагенты», «Контактные лица». Их можно просмотреть, открыв раздел «Справочники», используя пункт меню «Все функций». Если этот раздел не доступен, включить его можно в разделе «Сервис» — «Параметры».

Рис.1 Контактная информация
Рис.1 Контактная информация
Рис.2 Контактная информация
Рис.2 Контактная информация

Пример заполнения «Контактной информации» в справочнике «Контрагенты».

Рис.3 «Контактная информация» в справочнике «Контрагенты»
Рис.3 «Контактная информация» в справочнике «Контрагенты»

Если мы откроем и посмотрим настройку элемента справочника «Контактная информация», например, «Юридический адрес», то мы увидим, что в поле «Тип» установлено значение «Адрес». Это верное значение, для данного вида информации.

Рис.4 Юридический адрес
Рис.4 Юридический адрес

Но, возможно, здесь некорректное отображение по каким-либо причинам, например, в процессе переноса данных из старой версии в новую могли быть перенесены лишние элементы. Их можно удалить. Также надо проверить остальные виды контактной информации, чтобы там не было пустых и неправильно заполненных полей. В случае обнаружения недочета, его также необходимо устранить.

Открыв любой вид контактной информации, мы видим, что в поле нет кнопки выбора, чтобы сменить (или установить в случае отсутствия) тип, но можно выйти из ситуации, используя копирование элемента и установку пометки на удаления неправильного элемента. В этом случае кнопка выбора типа информации активна.

Рис.5 Кнопка выбора типа информации активна
Рис.5 Кнопка выбора типа информации активна

После корректировки типа представления информации ошибка десериализации появляться не будет.

Еще одним способом устранения проблемы (более простым) является использование обработки по установке типа контактной информации «УстановкаТиповИВидовКИ». Ее можно найти в интернете, она написана сторонними разработчиками и для обычных форм, и для управляемых. С ее помощью можно изменить тип любого элемента справочника «Контактная информация».

Рис.6 УстановкаТиповИВидовКИ
Рис.6 УстановкаТиповИВидовКИ

Выбираем элемент, который необходимо исправить, задаем правильный тип и нажимаем кнопку «Установить тип».

Рис.7 Установить тип
Рис.7 Установить тип

С изменением типа представления контактной информации ошибка появляться не будет. При этом необходимо обратить внимание, на какой элемент программа «ругается» – это может быть не только адрес, но и, например, телефон, адрес электронной почты. Тогда действие производится с указанным элементом.

MakcPletnev

41 / 37 / 9

Регистрация: 01.02.2014

Сообщений: 825

1

Ошибка десериализации объекта

05.04.2016, 00:24. Показов 6399. Ответов 9

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Ошибка десериализации объекта типа RespGroup1. Символы с шестнадцатеричными значениями 0xFFFE и 0xFFFF являются недопустимыми

В общем, не может дисериализировать такой вот JSON (Именно этот пример, плейлист большинства дисериализирует без проблем, 1 раз такая проблема):

JSON
1
http://rghost.ru/private/6f7ljsrHg/3a189b713a9234a1c8060046ce5eb779 - на форум не влезло...

Код:

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
[DataContract]
        public class RespGroup1
        {
            [DataMember(Name = "response")]
            public RespGroup2[] response { get; set; }
        }
        [DataContract]
        public class RespGroup2
        {
            [DataMember(Name = "count")]
            public string count { get; set; }
            [DataMember(Name = "items")]
            public Person[] items { get; set; }
        }
        [DataContract]
        public class Person
        {
            /*[DataMember(Name = "id")]
            public string id { get; set; }*/
 
            [DataMember(Name = "owner_id")]
            public string owner_id { get; set; }
            [DataMember(Name = "artist")]
            public string artist { get; set; }
            [DataMember(Name = "title")]
            public string title { get; set; }
 
            /*[DataMember(Name = "duration")]
            public string duration { get; set; }
            [DataMember(Name = "date")]
            public string date { get; set; }
            [DataMember(Name = "url")]
            public string url { get; set; }
            [DataMember(Name = "lyrics_id")]
            public string lyrics_id { get; set; }
            [DataMember(Name = "genre_id")]
            public string genre_id { get; set; }*/
        }
 
DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(RespGroup1));
RespGroup1 person = (RespGroup1)json.ReadObject(new System.IO.MemoryStream(Encoding.Unicode.GetBytes(html)));

Помогите пожалуйста, добрые люди)

Добавлено через 13 секунд
Кому не сложно, подскажите…

Добавлено через 9 минут
Ev_Hyper, была бы очень кстати твоя помощь сейчас)



0



Jason

525 / 487 / 98

Регистрация: 25.12.2011

Сообщений: 1,176

05.04.2016, 00:37

2

Просили — помогаю . Да вроде ничего сложного, Items — будет массив классов:

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
        static void Main(string[] args)
        {
            DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(Music));
            string fileContent = System.IO.File.ReadAllText(@"E:1.txt");
            Music music = (Music)json.ReadObject(new System.IO.MemoryStream(Encoding.UTF8.GetBytes(fileContent)));
            Console.WriteLine(music.items[1].artist);
            Console.ReadLine();
        }
 
        [DataContract]
        public class Music
        {
            [DataMember(Name = "count")]
            public string count { get; set; }
            [DataMember(Name = "items")]
            public Item[] items { get; set; }
 
            [DataContract]
            public class Item
            {
                [DataMember(Name = "id")]
                public string id { get; set; }
                [DataMember(Name = "owner_id")]
                public string owner_id { get; set; }
                [DataMember(Name = "artist")]
                public string artist { get; set; }
                [DataMember(Name = "title")]
                public string title { get; set; }
                [DataMember(Name = "duration")]
                public string duration { get; set; }
                [DataMember(Name = "date")]
                public string date { get; set; }
                [DataMember(Name = "url")]
                public string url { get; set; }
                [DataMember(Name = "lyrics_id")]
                public string lyrics_id { get; set; }
                [DataMember(Name = "genre")]
                public string genre { get; set; }
            }
        }

P.S. Только я удалил — {«response»:[ в начале и ]} в конце (для удобства).



0



41 / 37 / 9

Регистрация: 01.02.2014

Сообщений: 825

05.04.2016, 00:44

 [ТС]

3

Jason, попробуй это: https://yadi.sk/d/YG60-YYiqjhe9
Вот тут точно выбьет ошибку… Только что выковырнул кусок

Добавлено через 4 минуты
p.sы, там несколько блоков



0



525 / 487 / 98

Регистрация: 25.12.2011

Сообщений: 1,176

05.04.2016, 00:45

4

Это уже издевательство, был пример выше, я его разобрал, а тут на 6 метров не пойми чего, я это нормально даже прочитать не могу.



0



41 / 37 / 9

Регистрация: 01.02.2014

Сообщений: 825

05.04.2016, 00:46

 [ТС]

5

Jason, это тот же самый json , с описанием из шапки. Фишка в том, что выдает ошибку
«Символы с шестнадцатеричными значениями 0xFFFE и 0xFFFF являются недопустимыми», надо решить вопрос именно с ней…



0



Jason

525 / 487 / 98

Регистрация: 25.12.2011

Сообщений: 1,176

05.04.2016, 01:59

6

Вот так нужно было урезать структуру:

JSON
1
{"response":[{"count":1,"items":[{"id":456239020,"owner_id":35541739,"artist":"Response 1 - 1","title":"Du bist nicht allein","duration":241,"date":1459553197,"url":"http://cs4505.vk.me/u690598/audios/f1f28c909424.mp3?extra=fSUfByfOF6k73qvvAYQ6YdFm0hz-srnBbJtn1VsuTJQTMkm0O-Sw1HNGmM17MQoXoEpuNVSnGlRWpSFwxVH4OYJGY7SSGX6iZFFzTPFIdYoHK77MCKZFLm-AVxt6CX0SvMAoYRbvHDwQ","genre_id":18}]},{"count":2,"items":[{"id":456239020,"owner_id":35541739,"artist":"Response 2 - 1","title":"Du bist nicht allein","duration":241,"date":1459553197,"url":"http://cs4505.vk.me/u690598/audios/f1f28c909424.mp3?extra=fSUfByfOF6k73qvvAYQ6YdFm0hz-srnBbJtn1VsuTJQTMkm0O-Sw1HNGmM17MQoXoEpuNVSnGlRWpSFwxVH4OYJGY7SSGX6iZFFzTPFIdYoHK77MCKZFLm-AVxt6CX0SvMAoYRbvHDwQ","genre_id":18},{"id":456239020,"owner_id":35541739,"artist":"Response 2 - 2","title":"Du bist nicht allein","duration":241,"date":1459553197,"url":"http://cs4505.vk.me/u690598/audios/f1f28c909424.mp3?extra=fSUfByfOF6k73qvvAYQ6YdFm0hz-srnBbJtn1VsuTJQTMkm0O-Sw1HNGmM17MQoXoEpuNVSnGlRWpSFwxVH4OYJGY7SSGX6iZFFzTPFIdYoHK77MCKZFLm-AVxt6CX0SvMAoYRbvHDwQ","genre_id":18}]}]}

Так, а теперь код:

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
        static void Main(string[] args)
        {
            DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(Music));
            string fileContent = System.IO.File.ReadAllText(@"E:1.txt");
            Music music = (Music)json.ReadObject(new System.IO.MemoryStream(Encoding.UTF8.GetBytes(fileContent)));
            Console.WriteLine(music.response[0].items[0].artist);
            Console.WriteLine(music.response[1].items[1].artist);
            Console.ReadLine();
        }
 
        [DataContract]
        public class Music
        {
 
            [DataMember(Name = "response")]
            public Response[] response { get; set; }
 
            [DataContract]
            public class Response
            {
                [DataMember(Name = "count")]
                public string count { get; set; }
                [DataMember(Name = "items")]
                public Item[] items { get; set; }
 
                [DataContract]
                public class Item
                {
                    [DataMember(Name = "id")]
                    public string id { get; set; }
                    [DataMember(Name = "owner_id")]
                    public string owner_id { get; set; }
                    [DataMember(Name = "artist")]
                    public string artist { get; set; }
                    [DataMember(Name = "title")]
                    public string title { get; set; }
                    [DataMember(Name = "duration")]
                    public string duration { get; set; }
                    [DataMember(Name = "date")]
                    public string date { get; set; }
                    [DataMember(Name = "url")]
                    public string url { get; set; }
                    [DataMember(Name = "lyrics_id")]
                    public string lyrics_id { get; set; }
                    [DataMember(Name = "genre")]
                    public string genre { get; set; }
                }
            }
        }

P.S.

Цитата
Сообщение от MakcPletnev
Посмотреть сообщение

Символы с шестнадцатеричными значениями 0xFFFE и 0xFFFF являются недопустимыми», надо решить вопрос именно с ней…

А на счет этого, не нужно файлы сохранять в формате Юникод и т.п. Сохраните файл в ANSI и проверяем…

Либо пробовать что-то вроде этого:

C#
1
2
3
4
5
6
7
8
9
10
11
        static void Main(string[] args)
        {
            DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(Music));
            string fileContent = System.IO.File.ReadAllText(@"E:1.txt");
            byte[] b = Encoding.Unicode.GetBytes(fileContent);
            b = Encoding.Convert(Encoding.Unicode, Encoding.ASCII, b);
            Music music = (Music)json.ReadObject(new System.IO.MemoryStream(b));
            Console.WriteLine(music.response[0].items[0].artist);
            Console.WriteLine(music.response[1].items[1].artist);
            Console.ReadLine();
        }



0



41 / 37 / 9

Регистрация: 01.02.2014

Сообщений: 825

06.04.2016, 21:04

 [ТС]

7

Jason, из-за этого не поддерживается кириллица, я пробовал уже
Есть еще варианты?

Добавлено через 1 минуту
русские символы отображаются в виде ‘?’



0



976 / 871 / 350

Регистрация: 26.04.2012

Сообщений: 2,647

07.04.2016, 02:36

8

Я большой JSON обычно не десериализую, а использую при при помощи библиотеки Newtonsoft.Json и тамошнего класса JToken.



0



41 / 37 / 9

Регистрация: 01.02.2014

Сообщений: 825

26.07.2016, 11:06

 [ТС]

9

EvilFromHell, может расскажете как?



0



Master of Orion

Эксперт .NET

6095 / 4951 / 905

Регистрация: 10.07.2011

Сообщений: 14,522

Записей в блоге: 5

27.07.2016, 00:06

10

EvilFromHell, забавно, что я в DataContractSerializer при сериализации в XML ловил точно такую же ошибку. Решалось просто вырезанием всего, что не проходит проверку XmlConvert.IsXmlChar. Вполне возможно, что JSON реально не ест эти символы (это именно некорректные символы, а не кириллица, например если суррогатная пара применена с символом, с которой её использование недопустимо). Не уверен, что JSON.Net поможет, хотя я в любом случае его использую во всех случаях работы с JSON. Слишком удобно чтобы отказываться.



1



Ошибка таким названием в случае записи контрагента сейчас достаточно часто может быть вызвана переходом на новую версию «1С Бухгалтерии 3.0» на основе платформы «1С 8.3». Связана последняя с неправильной конвертацией справочника под названием «Виды контактной информации» из старой версии программного продукта.

Скрин 1

Также кроме бухгалтерии ошибка может быть и в других конфигурациях: «УНФ», «1С Управление торговлей 11», «ERP», а также других решениях на основе «БСП 2».

Справочник с именем «Виды контактной информации» имеет в себе определенный перечень допустимых типов данных. Также он содержит состав определенных элементов (например, «Фактический телефон», «Юридический адрес», телефон и т.д.). Кроме этого у него существует возможность добавлять и другие новые виды данных, которые будут отражаться на формах.

Как устранить эту ошибку?

Чтобы устранить данную ошибку, есть два пути. Первый из них — «пометить на удаление». Здесь все ясно: в случае отметки на удаление это поле на форме справочников уже не будет отражаться.

А второй путь состоит в необходимости «установить правильный тип». Такой выход из данной ситуации более интересный и правильный. Однако выбрать нужный тип просто программный продукт вам не даст:

Скрин 2

Чтобы сравнительно быстро и просто вы могли установить правильный тип, мы, например, написали крохотную обработку. Скачать ее можно здесь:

Для этого я написал крошечную обработку, которой пользоваться очень просто. Подобно можете поступить и вы.

Скрин 3

После этого ошибка десериализации проявляться больше не будет.

Ошибка при десериализации файла

Последние изменения: 2022-02-10

Ошибка:

При подключении ТСД к клиенту появляется следующая ошибка:

"Внутренняя ошибка открытия документа. Подробности смотрите в errors.log"

В логе присутствует следующая ошибка:

Ошибка при открытии документа 
MESSAGE:    Ошибка при десериализации файла 'ApplicationMobileSMARTSConfigurationCleverence.Warehouse.Environment.xml', смещение: 1865

Решение:

Данная ошибка означает, что на ТСД находится битый файл конфигурации. Скопируйте из папки «стандартная конфигурация» в папку «текущая конфигурация» согласно таблице (Папки и их содержимое) и перевыгрузите номенклатуру.

In your XML file your root element is the namespace http://kmd.dk/fie/external_invoiceDistribution with prefix ns1.

The element <CONTROL_FIELDS> isn’t because it isn’t prefixed. Your serialization class doesn’t take this into account though. That means that it expects that <CONTROL_FIELDS> and the other elements are ALSO in the ns1 namespace.

To get the serializer parse the elements correctly add the Namespace to the elements, setting it to an empty string:

[XmlRoot(Namespace = "http://kmd.dk/fie/external_invoiceDistribution", IsNullable = false)]
public class InvoiceChangeRequest
{
    [XmlElement("CONTROL_FIELDS", Namespace = "")]
    public ControlFields Styrefelter { get; set; }
    [XmlElement("HEADER_IN", Namespace = "")]
    public HeaderIn HeaderfelterInd { get; set; }
    [XmlElement("ITEMS", Namespace = "")]
    public Items Linjer { get; set; }
}

This will de-serialize the given XML as intended.

In case of de-serialization issues I often create the classes in memory and then serialize that so I can inspect the resulting XML. That often gives clues on what is missing or being added compared to the input document:

        var ms = new MemoryStream();
        serializer.Serialize(ms, new InvoiceChangeRequest {
            Styrefelter = new ControlFields {  Opera="test"}
        });
        var s = Encoding.UTF8.GetString(ms.ToArray());

And then inspect s for differences.

  • Ошибка десериализации тела ответного сообщения для операции getprofiles
  • Ошибка десериализации контактной информации 1с
  • Ошибка десериализации json python
  • Ошибка деретикс call of duty modern warfare
  • Ошибка делить на ноль excel