Функция преобразования, используемая при сериализации данных в JSON, вызывается для всех свойств, тип которых не поддерживает преобразование в формат JSON на прямую. В "функции преобразования" разработчик напрямую может проанализировать переданный объект и вернуть платформе значение которое может быть сериализовано в JSON (строка, число, дата, коллекции значений ..) либо отказаться от записи значения. Привожу пример с Объектом встроенного языка - ДанныеАдреса (подобие фикс структуры, создается на основе структуры с определенными ключами).
&НаСервере
Процедура ВыполнитьЗаписьДанныхНаСервере()
ПутьНаСервере1 = "C:\Users\SystemX\Desktop\TestJSON_1.json";
ПутьНаСервере2 = "C:\Users\SystemX\Desktop\TestJSON_2.json";
МассивДанных = Новый Массив;
ЗаполнитьМассивДанными(МассивДанных);
СтруктураЗаписываемогоФайла = Новый Структура("Info");
СтруктураЗаписываемогоФайла.Info = МассивДанных;
// 1. Новый способ (преимущественно для простых типов, быстрой генерации JSON строки);
//Попытка
// ЗначениеJSON = ЗаписатьЗначениеJSON(СтруктураЗаписываемогоФайла);
//Исключение
//КонецПопытки;
// 2. Старый способ;
ЗаписьJSON = Новый ЗаписьJSON();
ЗаписьJSON.ОткрытьФайл(ПутьНаСервере1, "UTF-8",, Новый ПараметрыЗаписиJSON(, " "));
НастройкиСериализации = Новый НастройкиСериализацииJSON();
НастройкиСериализации.ВариантЗаписиДаты = ВариантЗаписиДатыJSON.УниверсальнаяДата;
НастройкиСериализации.СериализовыватьМассивыКакОбъекты = Ложь;
НастройкиСериализации.ФорматСериализацииДаты = ФорматДатыJSON.ISO;
Попытка
ЗаписатьJSON(ЗаписьJSON, СтруктураЗаписываемогоФайла, НастройкиСериализации, "ФункцияПреобразованияНеСериализуемыхТипов", ЭтотОбъект);
Исключение
КонецПопытки;
ЗаписьJSON.Закрыть();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьМассивДанными(МассивДанных)
Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 20
| Контрагенты.Наименование КАК Наименование,
| Контрагенты.НаименованиеПолное КАК НаименованиеПолное,
| Контрагенты.ИНН КАК ИНН,
| Контрагенты.КПП КАК КПП,
| Контрагенты.ЮрФизЛицо КАК ЮрФизЛицо
|ИЗ
| Справочник.Контрагенты КАК Контрагенты ");
Выборка = Запрос.Выполнить().Выбрать();
Счетчик = 1;
Пока Выборка.Следующий() Цикл
СтруктураКонтрагент = Новый Структура("Наименование, НаименованиеПолное, ИНН, КПП, ЮрФизЛицо");
ЗаполнитьЗначенияСвойств(СтруктураКонтрагент, Выборка);
Если Выборка.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо Тогда
СтруктураКонтрагент.ЮрФизЛицо = "Физическое лицо";
ИначеЕсли Выборка.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо Тогда
СтруктураКонтрагент.ЮрФизЛицо = "Юридическое лицо";
Иначе
СтруктураКонтрагент.ЮрФизЛицо = "Индивидуальный предприниматель";
КонецЕсли;
СтруктураКонтрагент.Вставить("ТекущаяДата", ЗаписатьДатуJSON(ТекущаяДата(), ФорматДатыJSON.ISO, ВариантЗаписиДатыJSON.УниверсальнаяДата));
ДопИнформация = Новый ДанныеАдреса(
Новый Структура
(
"Страна, Город, Дом, Индекс",
"Страна - " + Счетчик,
"Город - " + Счетчик,
"Дом - " + Счетчик,
"Индекс - " + Счетчик
)
);
СтруктураКонтрагент.Вставить("ДанныеАдреса", ДопИнформация);
МассивДанных.Добавить(СтруктураКонтрагент);
Счетчик = Счетчик + 1;
КонецЦикла;
КонецПроцедуры // ЗаполнитьМассивДанными()
&НаСервере
Функция ФункцияПреобразованияНеСериализуемыхТипов(Свойство, Значение, ДополнительныеПараметры, Отказ) Экспорт
// Вызывается для тех типов, которые платформа не может автоматические преобразовать в JSON;
Если Свойство = "ДанныеАдреса" Тогда
Возврат Строка(Значение.Страна + "; " + Значение.Город + "; " + Значение.Индекс);
КонецЕсли;
КонецФункции // ФункцияПреобразованиеСложныхТипов()
&НаКлиенте
Процедура ВыполнитьЗаписьДанных(Команда)
ВыполнитьЗаписьДанныхНаСервере();
КонецПроцедуры
{5} Переменной ПутьНаСервере2 присвоено значение, но оно нигде не используется {93} Не все части функции возвращают значение Орфографическая ошибка в сериализовано: сериализовано Орфографическая ошибка в СериализовыватьМассивыКакОбъекты: Сериализовывать Орфографическая ошибка в ФункцияПреобразованияНеСериализуемыхТипов (найдено 2): Сериализуемых
ПреобразованиеЗначенийJSON (БСП)
Отправка почты с вложением БСП
ОбновитьЗаписьВКэшеОповещений (БСП)
УдалитьЗаписьИзКэшаОповещений (БСП)
ТаблицаЗначенийВСписокСтруктур
СписокСтруктурВТаблицуЗначений
МассивСтруктурВТаблицуЗначений