0Pricing
Kotlin Academy · Урок

Сериализуемые классы

Аннотируйте модели

«Сериализуемые классы» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Настройка kotlinx.serialization
  2. Сериализуемые классы
  3. Кодирование и декодирование JSON
  4. Пользовательские сериализаторы
← Назад к Kotlin Academy