Введение в сериализацию в Kotlin
Сериализация - перевод значения в последовательность символов, которую можно сохранить или передать. Обратный шаг - десериализация: из текста снова получают поля объекта с теми же данными.
Для обмена между программами часто берут формат JSON:
фигурные скобки, пары имя-значение, кавычки у строк.
Kotlin не встроил такой обмен в язык, но библиотека
kotlinx.serialization генерирует код по
объявлению класса, если его пометить аннотацией
@Serializable.
Ключевое слово data class с двумя свойствами удобно описывает
запись каталога: название и количество. Аннотация
говорит компилятору подготовить правила записи и
чтения для этого типа:
import kotlinx.serialization.Serializable
@Serializable
data class CatalogItem(val title: String, val qty: Int)
После подключения модуля JSON готовый объект можно
превратить в одну строку. Для элемента с названием
"notebook" и количеством 3 текст
будет по смыслу равен
{"title":"notebook","qty":3} - имена полей
совпадают с именами свойств в Kotlin.
Полный фрагмент программы с записью в строку выглядит так:
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
@Serializable
data class CatalogItem(val title: String, val qty: Int)
fun main() {
val item = CatalogItem("notebook", 3)
val text = Json.encodeToString(item)
println(text)
}
В консоли появляется JSON без переносов. Эту же строку
можно передать в другой процесс или положить в файл,
а затем восстановить CatalogItem с теми же
значениями полей.
Аннотация не меняет поведение класса в обычном коде:
конструктор, copy и сравнение по полям
остаются как у любого data class. Дополнительно
появляется мост между объектом в памяти и текстовым
представлением.