Книга: Технологии интеграции "1С:Предприятия 8.3""
Назад: Сериализация прикладных типов «1С:Предприятия»
Дальше: Чтение

Запись

JSON-сериализация «эмулирует» XML-сериализацию, в силу чего получающийся JSON-документ внешне выглядит очень похоже на соответствующий XML-документ. В JSON-документ могут быть помещены любые объекты системы «1С:Предприятие», для которых указано, что они могут быть сериализованы в XDTO.

Общие принципы сериализации в JSON идентичны XDTO-сериализации в XML. В частности:

Сериализация прикладных типов в JSON-документ происходит с помощью метода ЗаписатьJSON() объекта глобального контекста СериализаторXDTO.

При этом существует одна важная особенность. В отличие от XML для записи начала объекта JSON нет необходимости указывать его имя. Поэтому сериализация/десериализация в/из JSON может выполняться одним из двух способов.

Во-первых, при сериализации в параметре НазначениеТипаXML метода ЗаписатьJSON() можно указать явное назначение типа (НазначениеТипаXML.Явное). Десериализовать такой объект можно без указания типа считываемого значения (листинг 1.45).

Листинг 1.45. Пример сериализации элемента справочника в JSON-документ с указанием типа

&НаСервереБезКонтекста

Процедура СериализацияПрикладныхТиповНаСервере()

 

// Получить записываемый объект.

СсылкаНаОбъект = Справочники.Сотрудники.НайтиПоКоду("000000003");

Объект = СсылкаНаОбъект.ПолучитьОбъект();

 

// Создать объект записи и открыть файл, в который будет выполняться запись.

Запись = Новый ЗаписьJSON;

ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);

Запись.ОткрытьФайл("c:\temp\SerialisationXDTO.json",,, ПараметрыЗаписиJSON);

 

// Выполнить запись данных (Объект) с помощью объекта записи (Запись).

СериализаторXDTO.ЗаписатьJSON(Запись, Объект, НазначениеТипаXML.Явное);

 

// Завершить работу с файлом.

Запись.Закрыть();

 

КонецПроцедуры

В процедуре записи ссылка на объект справочника Сотрудники находится по коду, а затем данные объекта записываются в JSON-документ с указанием его типа.

В результате сформированный JSON-документ будет иметь следующий вид (листинг 1.46).

Листинг 1.46. Содержимое JSON-документа

{

"#type": "jcfg:CatalogObject.Сотрудники",

"#value": {

"Ref": "0b6cd7dc-36a0-11e9-8bb2-642737df2048",

"DeletionMark": false,

"Code": "000000003",

"Description": "Артемов Игорь Владимирович",

"ДатаРождения": "1970-01-31T00:00:00",

"КоличествоДетей": 2,

"Работает": true,

"Стаж": "25.03.20"

}

}

Из соображений компактности сформированного JSON-документа для встроенных типов платформы пространства имен не записываются полностью в отдельном свойстве JSON, а указываются в виде префикса перед типом, например jcfg (см. листинг 1.46).

В данном случае префикс cfg обозначает пространство имен http://v8.1c.ru/8.1/data/enterprise/current-config. Соответствие префиксов пространствам имен «зашито» в платформу. Поэтому обмен данными между прикладными решениями «1С:Предприятия» выполняется стандартным образом. А при обмене с внешними системами для правильной десериализации типов платформы внешней системе понадобится полная таблица соответствия, приведенная в документации.

Во-вторых, можно выполнить сериализацию в JSON без явного назначения типа (листинг 1.47). Но тогда тип нужно будет указать при десериализации (см. листинг 1.50).

Листинг 1.47. Пример сериализации элемента справочника в JSON-документ без указания типа

&НаСервереБезКонтекста

Процедура СериализацияПрикладныхТиповНаСервере()

 

// Получить записываемый объект.

СсылкаНаОбъект = Справочники.Сотрудники.НайтиПоКоду("000000002");

Объект = СсылкаНаОбъект.ПолучитьОбъект();

 

// Создать объект записи и открыть файл, в который будет выполняться запись.

Запись = Новый ЗаписьJSON;

ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);

Запись.ОткрытьФайл("c:\temp\SerialisationXDTO_2.json",,, ПараметрыЗаписиJSON);

 

// Выполнить запись данных (Объект) с помощью объекта записи (Запись).

СериализаторXDTO.ЗаписатьJSON(Запись, Объект);

 

// Завершить работу с файлом.

Запись.Закрыть();

 

КонецПроцедуры

В результате сформированный JSON-документ будет иметь следующий вид (листинг 1.48).

Листинг 1.48. Содержимое JSON-документа

{

"#value": {

"Ref": "0b6cd7db-36a0-11e9-8bb2-642737df2048",

"DeletionMark": false,

"Code": "000000002",

"Description": "Смирнова Светлана Ивановна",

"ДатаРождения": "1990-02-22T00:00:00",

"КоличествоДетей": 0,

"Работает": false,

"Стаж": "03.10.27"

}

}

Кроме того, нужно учитывать, что сериализация значений типа Дата выполняется в формате ISO. Это определяется механизмом XDTO и не управляется при записи данных. Также при операции сериализации не поддерживается использование функции преобразования, в отличие от потоковой и объектной техник.

Назад: Сериализация прикладных типов «1С:Предприятия»
Дальше: Чтение