|
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