При десериализации, так же как и в случае с примитивными типами и коллекциями, есть возможность изменить получаемые данные. Для этого можно использовать функцию восстановления.
Например, при переносе элемента справочники Сотрудники из одной базы в другую требуется каким-то образом изменить его код. Пусть сформированный JSON-документ имеет следующий вид (листинг 1.51).
Листинг 1.51. Содержимое JSON-документа
{
"#type": "jcfg:CatalogObject.Сотрудники",
"#value": {
"Ref": "9575f8ed-369f-11e9-8bb2-642737df2048",
"DeletionMark": false,
"Code": "000000001",
"Description": "Алексеев Сергей Иванович",
"ДатаРождения": "1980-12-10T00:00:00",
"КоличествоДетей": 1,
"Работает": true,
"Стаж": "10.05.01",
"Должность": "88d54406-36a1-11e9-8bb2-642737df2048"
}
}
Для этого в метод ПрочитатьJSON() мы передаем имя функции восстановления и массив имен свойств, для которых она должна вызываться (листинг 1.52).
Листинг 1.52. Пример десериализации элемента справочника с функцией восстановления
&НаСервере
Процедура ВосстановлениеПриДесериализацииХДТОНаСервере()
// Создать объект чтения и открыть файл, из которого будет выполняться чтение.
Чтение = Новый ЧтениеJSON;
Чтение.ОткрытьФайл("c:\temp\SerialisationXDTO_3.json");
// Заполнить массив имен реквизитов для восстановления.
РеквизитыДляВосстановления = Новый Массив;
РеквизитыДляВосстановления.Добавить("Code");
// Выполнить чтение данных в структуру Данные с помощью объекта чтения (Чтение).
Данные = СериализаторXDTO.ПрочитатьJSON(Чтение, , "ФункцияВосстановленияЧтенияXDTO", ЭтотОбъект, , , РеквизитыДляВосстановления);
// Завершить работу с файлом.
Чтение.Закрыть();
// Вывести результат чтения в сообщение.
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Код: " + Данные.Code + ", ФИО: " + Данные.Description + ", ДР: "+ Данные.ДатаРождения +
", Детей: " + Данные.КоличествоДетей + ", Работает: " + Данные.Работает + ", Стаж: " + Данные.Стаж +
", Должность: " + Данные.Должность;
Сообщение.Сообщить();
КонецПроцедуры
Функцию восстановления заполним следующим образом (листинг 1.53).
Листинг 1.53. Функция восстановления
&НаСервере
Функция ФункцияВосстановленияЧтенияXDTO(Свойство, Тип, Значение, ДополнительныеПараметры) Экспорт
Если Свойство = "Code" Тогда
КодОбмена = "НМК-" + Прав(Значение.Значение, 5);
ТипXDTOКод = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema","string");
Возврат ФабрикаXDTO.Создать(ТипXDTOКод, КодОбмена);
КонецЕсли;
КонецФункции
В функции восстановления в параметре Значение будет содержаться объект XDTO. Его значение (Значение.Значение) мы изменяем нужным образом и возвращаем в метод ПрочитатьJSON().
Результат чтения JSON-документа, содержимое которого показано в листинге 1.51, будет выглядеть следующим образом (рис. 1.10).
Рис. 1.10. Чтение элемента справочника из JSON-документа с функцией восстановления