|
21 | 21 | Возврат СериализоватьБулево(Значение);
|
22 | 22 | ИначеЕсли ТипЗначения = Тип("Массив") Тогда
|
23 | 23 | Возврат СериализоватьМассив(Значение, УровеньОтступа);
|
24 |
| - ИначеЕсли ТипЗначения = Тип("Структура") Тогда |
25 |
| - Возврат СериализоватьСтруктуру(Значение, УровеньОтступа); |
26 |
| - ИначеЕсли ТипЗначения = Тип("Соответствие") Тогда |
27 |
| - Возврат СериализоватьСоответствие(Значение, УровеньОтступа); |
| 24 | + ИначеЕсли ТипЗначения = Тип("Структура") Или ТипЗначения = Тип("Соответствие") Тогда |
| 25 | + Возврат СериализоватьОбъект(Значение, УровеньОтступа); |
28 | 26 | ИначеЕсли Значение = Неопределено Тогда
|
29 | 27 | Возврат "null";
|
30 | 28 | ИначеЕсли ТипЗначения = Тип("Дата") Тогда
|
|
127 | 125 | Отступ = ПолучитьОтступ(УровеньОтступа);
|
128 | 126 |
|
129 | 127 | Для Каждого Элемент Из Массив Цикл
|
130 |
| - Если Результат <> "" Тогда |
131 |
| - Результат = Результат + Символы.ПС; |
132 |
| - КонецЕсли; |
| 128 | + Результат = Результат + Символы.ПС; |
133 | 129 |
|
134 | 130 | СериализованныйЭлемент = Сериализовать(Элемент, УровеньОтступа + 1);
|
135 |
| - |
136 |
| - // Если элемент многострочный, добавляем отступ к каждой строке |
137 |
| - Если СтрНайти(СериализованныйЭлемент, Символы.ПС) > 0 Тогда |
138 |
| - СтрокиЭлемента = СтрРазделить(СериализованныйЭлемент, Символы.ПС); |
139 |
| - ПерваяСтрока = Истина; |
140 |
| - Для Каждого СтрокаЭлемента Из СтрокиЭлемента Цикл |
141 |
| - Если ПерваяСтрока Тогда |
142 |
| - Результат = Результат + Отступ + "- " + СтрокаЭлемента; |
143 |
| - ПерваяСтрока = Ложь; |
144 |
| - Иначе |
145 |
| - Результат = Результат + Символы.ПС + ПолучитьОтступ(УровеньОтступа + 1) + СтрокаЭлемента; |
146 |
| - КонецЕсли; |
147 |
| - КонецЦикла; |
148 |
| - Иначе |
149 |
| - Результат = Результат + Отступ + "- " + СериализованныйЭлемент; |
150 |
| - КонецЕсли; |
151 |
| - КонецЦикла; |
152 |
| - |
153 |
| - Возврат Результат; |
154 |
| - |
155 |
| -КонецФункции |
| 131 | + МассивСтрок = СтрРазделить(СериализованныйЭлемент, Символы.ПС, Ложь); |
| 132 | + СериализованныйЭлемент = ""; |
| 133 | + ОтступВложения = ПолучитьОтступ(УровеньОтступа + 1); |
| 134 | + Для каждого Строка Из МассивСтрок Цикл |
| 135 | + СериализованныйЭлемент = СериализованныйЭлемент + ?(ЗначениеЗаполнено(СериализованныйЭлемент), Символы.ПС + ОтступВложения, Отступ + "- ") + СокрЛП(Строка); |
| 136 | + КонецЦикла; |
| 137 | + // Убираем последний отступ |
| 138 | + СериализованныйЭлемент = СокрП(СериализованныйЭлемент); |
| 139 | + Результат = Результат + СериализованныйЭлемент; |
156 | 140 |
|
157 |
| -// Сериализация структуры |
158 |
| -// |
159 |
| -// Параметры: |
160 |
| -// Структура - Структура - структура для сериализации |
161 |
| -// УровеньОтступа - Число - текущий уровень отступа |
162 |
| -// |
163 |
| -// Возвращаемое значение: |
164 |
| -// Строка - YAML представление структуры |
165 |
| -// |
166 |
| -Функция СериализоватьСтруктуру(Структура, УровеньОтступа = 0) |
167 |
| - |
168 |
| - Если Структура.Количество() = 0 Тогда |
169 |
| - Возврат "{}"; |
170 |
| - КонецЕсли; |
171 |
| - |
172 |
| - Результат = ""; |
173 |
| - Отступ = ПолучитьОтступ(УровеньОтступа); |
174 |
| - |
175 |
| - Для Каждого КлючЗначение Из Структура Цикл |
176 |
| - Если Результат <> "" Тогда |
177 |
| - Результат = Результат + Символы.ПС; |
178 |
| - КонецЕсли; |
179 |
| - |
180 |
| - Ключ = КлючЗначение.Ключ; |
181 |
| - Значение = КлючЗначение.Значение; |
182 |
| - |
183 |
| - СериализованныйКлюч = СериализоватьКлюч(Ключ); |
184 |
| - СериализованноеЗначение = Сериализовать(Значение, УровеньОтступа + 1); |
185 |
| - |
186 |
| - // Если значение многострочное, добавляем отступ к каждой строке кроме первой |
187 |
| - Если СтрНайти(СериализованноеЗначение, Символы.ПС) > 0 Тогда |
188 |
| - СтрокиЗначения = СтрРазделить(СериализованноеЗначение, Символы.ПС); |
189 |
| - Результат = Результат + Отступ + СериализованныйКлюч + ":"; |
190 |
| - Для Каждого СтрокаЗначения Из СтрокиЗначения Цикл |
191 |
| - Результат = Результат + Символы.ПС + ПолучитьОтступ(УровеньОтступа + 1) + СтрокаЗначения; |
192 |
| - КонецЦикла; |
193 |
| - Иначе |
194 |
| - Результат = Результат + Отступ + СериализованныйКлюч + ": " + СериализованноеЗначение; |
195 |
| - КонецЕсли; |
196 | 141 | КонецЦикла;
|
197 | 142 |
|
198 | 143 | Возврат Результат;
|
199 | 144 |
|
200 | 145 | КонецФункции
|
201 | 146 |
|
202 |
| -// Сериализация соответствия |
| 147 | +// Сериализация объекта |
203 | 148 | //
|
204 | 149 | // Параметры:
|
205 |
| -// Соответствие - Соответствие - соответствие для сериализации |
| 150 | +// Объект - Соответствие, Структура - соответствие для сериализации |
206 | 151 | // УровеньОтступа - Число - текущий уровень отступа
|
207 | 152 | //
|
208 | 153 | // Возвращаемое значение:
|
209 | 154 | // Строка - YAML представление соответствия
|
210 | 155 | //
|
211 |
| -Функция СериализоватьСоответствие(Соответствие, УровеньОтступа = 0) |
| 156 | +Функция СериализоватьОбъект(Объект, УровеньОтступа = 0) |
212 | 157 |
|
213 |
| - Если Соответствие.Количество() = 0 Тогда |
| 158 | + Если Объект.Количество() = 0 Тогда |
214 | 159 | Возврат "{}";
|
215 | 160 | КонецЕсли;
|
216 | 161 |
|
217 | 162 | Результат = "";
|
218 | 163 | Отступ = ПолучитьОтступ(УровеньОтступа);
|
219 | 164 |
|
220 |
| - Для Каждого КлючЗначение Из Соответствие Цикл |
221 |
| - Если Результат <> "" Тогда |
222 |
| - Результат = Результат + Символы.ПС; |
223 |
| - КонецЕсли; |
| 165 | + Для Каждого КлючЗначение Из Объект Цикл |
| 166 | + Результат = Результат + Символы.ПС; |
224 | 167 |
|
225 | 168 | Ключ = КлючЗначение.Ключ;
|
226 | 169 | Значение = КлючЗначение.Значение;
|
227 | 170 |
|
228 | 171 | СериализованныйКлюч = СериализоватьКлюч(Ключ);
|
229 | 172 | СериализованноеЗначение = Сериализовать(Значение, УровеньОтступа + 1);
|
230 | 173 |
|
231 |
| - // Если значение многострочное, добавляем отступ к каждой строке кроме первой |
232 |
| - Если СтрНайти(СериализованноеЗначение, Символы.ПС) > 0 Тогда |
233 |
| - СтрокиЗначения = СтрРазделить(СериализованноеЗначение, Символы.ПС); |
234 |
| - Результат = Результат + Отступ + СериализованныйКлюч + ":"; |
235 |
| - Для Каждого СтрокаЗначения Из СтрокиЗначения Цикл |
236 |
| - Результат = Результат + Символы.ПС + ПолучитьОтступ(УровеньОтступа + 1) + СтрокаЗначения; |
237 |
| - КонецЦикла; |
238 |
| - Иначе |
| 174 | + |
239 | 175 | Результат = Результат + Отступ + СериализованныйКлюч + ": " + СериализованноеЗначение;
|
240 |
| - КонецЕсли; |
241 | 176 | КонецЦикла;
|
242 | 177 |
|
243 | 178 | Возврат Результат;
|
|
0 commit comments