Имя: Пароль:
1C
1С v8
Десериализация из двоичных данных
,
0 Gorr
 
18.07.19
11:13
Уважаемые Коллеги, добрый день!
Нужно выполнить сериализацию / десериализацию объекта через двоичные данные. С сериализацией проблем не возникает. А вот с десерализацией:
Сериализация:
ЗаписьFI = Новый ЗаписьFastInfoset;
ЗаписьFI.УстановитьДвоичныеДанные();
ЗаписьFI.ЗаписатьОбъявлениеXML();
СериализаторXDTO.ЗаписатьXML(ЗаписьFI,СериализуемыйОбъект,НазначениеТипаXML.Явное);
ДД = ЗаписьFI.Закрыть();
Десериализация
ЧтениеFI = Новый ЧтениеFastInfoset;
ЧтениеFI.УстановитьДвоичныеДанные(ДД);
Вот тут ошибка:
СериализаторXDTO.ПрочитатьXML(ЧтениеFI, Тип("Соответствие"));
Ошибка преобразования данных XDTO:
НачалоСвойства: {http://v8.1c.ru/8.1/data/core}Map    Форма: Элемент    Тип: {http://v8.1c.ru/8.1/data/core}Map
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: pair    Форма: Элемент    Тип: {http://v8.1c.ru/8.1/data/core}KeyAndValue
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://v8.1c.ru/8.1/data/core}KeyAndValue
Проверка свойства 'Key':
    форма: Элемент
    имя: {http://v8.1c.ru/8.1/data/core}Key
    тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Тип свойства неопределен
Квалифицированное имя типа: 'xs:decimal'
по причине:
Ошибка отображения пространства имен
Отсутствует отображение для префикса: 'xs'
1 olegves
 
18.07.19
11:17
(0) ДД надо сначала в Base64 и далее зиповать. Никакой сериализации там не надоть
2 vde69
 
18.07.19
11:20
Base64 - надо
зиповать - не надо
3 olegves
 
18.07.19
11:22
(2) если предполагается передача через тырнет, то надо
4 vde69
 
18.07.19
11:23
(3) зачем зиповать кусок когда зипуется весь пакет в целом?
5 Gorr
 
18.07.19
11:24
ДД нет. его надо получить из сериализуемого значения.
Если предлагается сначала сериализация в строку (через XML например), а затем Base64Значение, то для этого FastInfoset и был придуман (за один шаг).
6 Gorr
 
18.07.19
11:25
как я уже показал, сериализация в дд через FastInfoset проблем не вызывает.
Вопрос как потом сериализовать обратно из дд...
7 olegves
 
18.07.19
11:27
(5) FastInfoset в версионировании БСП используется - посмотри там
8 Gorr
 
18.07.19
11:30
Насколько я понял он там только для конверсии объектов в дд используется для подсчета контрольной суммы, чтобы понять есть ли различия между разными версиями. Кстати, идею преобразования объектов в дд как раз из БСП и взял. Вопрос в обратном преобразовании.
9 vde69
 
18.07.19
11:30
скопируй строку ДД в файл и посмотри, что именно там
10 Gorr
 
18.07.19
13:05
Стандартные объекты сериализуются/десериализуются. К сожалению десириализация Соответствия вызывает ошибку. Видимо не все что может быть сериализовано с помощью FastInfoset может быть восстановленно обратно. Вопрос решил через ЗначениеВФайл/ЗначениеИзФайла. Как всегда в 1С через одно место...
2 + 2 = 3.9999999999999999999999999999999...