Сериализуемые классы
Аннотируйте модели
«Сериализуемые классы» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.
Аннотация @Serializable
Чтобы сделать класс сериализуемым, пометьте его аннотацией @Serializable. После этого плагин компилятора создаст для него сериализатор.
import kotlinx.serialization.Serializable
@Serializable
data class User(val id: Int, val name: String)Работа с классами данных
Аннотацию можно применить к любому классу, но для моделей чаще всего выбирают классы данных, поскольку для них автоматически создаются equals, hashCode и toString.
Все свойства конструктора становятся сериализуемыми полями.
Значения по умолчанию
Свойства со значениями по умолчанию становятся необязательными при декодировании. Если JSON не содержит их, используется значение по умолчанию.
@Serializable
data class Config(
val host: String,
val port: Int = 8080,
val secure: Boolean = false
)Свойства, допускающие значение null
Типы, допускающие значение null, соответствуют JSON-значению null. Свойство, допускающее значение null, но не имеющее значения по умолчанию, всё равно является обязательным в JSON, хотя его значением может быть null.
@Serializable
data class Profile(
val name: String,
val bio: String? = null
)Переименование полей с помощью @SerialName
Имена полей JSON часто отличаются от соглашений об именовании в Kotlin. Используйте @SerialName, чтобы сопоставить их.
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class Account(
@SerialName("user_id") val userId: Int,
@SerialName("full_name") val fullName: String
)Исключение свойств с помощью @Transient
Пометьте свойство аннотацией @Transient, чтобы исключить его из сериализации. Для свойств с этой аннотацией обязательно нужно указать значение по умолчанию.
import kotlinx.serialization.Transient
import kotlinx.serialization.Serializable
@Serializable
data class Session(
val token: String,
@Transient val cachedAt: Long = 0L
)Вложенные сериализуемые классы
Сериализуемые классы могут содержать другие сериализуемые классы. Плагин автоматически обрабатывает весь граф объектов.
@Serializable
data class Address(val city: String, val zip: String)
@Serializable
data class Company(val name: String, val address: Address)Коллекции в моделях
Стандартные коллекции, такие как List, Set и Map, изначально поддерживают сериализацию, если сериализуемы их элементы.
@Serializable
data class Team(
val name: String,
val members: List<String>,
val scores: Map<String, Int>
)Поддержка перечислений
Классы перечислений можно пометить аннотацией @Serializable; по умолчанию они сериализуются по имени. Используйте @SerialName для элементов, чтобы изменить это имя.
@Serializable
enum class Role {
@SerialName("admin") ADMIN,
@SerialName("user") USER
}Кратко об обязательных и необязательных свойствах
Свойство является обязательным в JSON, если для него не задано значение по умолчанию. Основные правила:
- Нет значения по умолчанию → обязательно
- Есть значение по умолчанию → необязательно
@Transient→ игнорируется, значение по умолчанию обязательно- Допускает null без значения по умолчанию → обязательно, но может иметь значение null
Что нельзя сериализовать напрямую
Типам без встроенного сериализатора, например java.util.Date, java.time.Instant и UUID, нужен пользовательский сериализатор, о котором Вы узнаете позже.
Попытка сериализовать их без такого сериализатора приводит к ошибке компиляции.
Быстрая проверка
Какое утверждение об аннотации @Transient верно?
Итоги
Вы научились добавлять аннотации к моделям:
@Serializableдля класса- Значения по умолчанию делают поля необязательными
@SerialNameпереименовывает ключи JSON@Transientисключает поле, которому нужно значение по умолчанию
Далее Вы научитесь кодировать и декодировать JSON.
Часто задаваемые вопросы
Урок «Сериализуемые классы» бесплатный?
Да — полный текст урока «Сериализуемые классы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.
Чему я научусь в уроке «Сериализуемые классы»?
Аннотируйте модели Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Kotlin Academy?
Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Сериализуемые классы»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Kotlin Academy?
Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Настройка kotlinx.serialization
- Сериализуемые классы
- Кодирование и декодирование JSON
- Пользовательские сериализаторы