Начало работы с сериализацией в Kotlin
Сериализация преобразует объекты в формат, который можно сохранить или передать, а затем восстановить.
Сериализация в Kotlin поддерживает несколько форматов. В этом руководстве показано, как добавить необходимые плагины и зависимости для сериализации в Kotlin, а также сериализовать и десериализовать объекты в формате JSON.
Добавление плагинов и зависимостей
Чтобы подключить библиотеку kotlinx.serialization к проекту, добавьте соответствующие настройки плагина и зависимости для используемого инструмента сборки:
// build.gradle.kts
plugins {
kotlin("plugin.serialization") version "2.4.20"
}
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.11.0")
}
// build.gradle
plugins {
id 'org.jetbrains.kotlin.plugin.serialization' version '2.4.20'
}
dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.11.0'
}
<!-- pom.xml -->
<properties>
<kotlin.version>2.4.20</kotlin.version>
<serialization.version>1.11.0</serialization.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
<configuration>
<compilerPlugins>
<plugin>kotlinx-serialization</plugin>
</compilerPlugins>
</configuration>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-serialization</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlinx</groupId>
<artifactId>kotlinx-serialization-json</artifactId>
<version>${serialization.version}</version>
</dependency>
</dependencies>
Добавление библиотеки в мультиплатформенный проект
Чтобы использовать сериализацию JSON в Kotlin в мультиплатформенных проектах, добавьте зависимость от библиотеки сериализации JSON в общий набор исходного кода:
commonMain {
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.11.0")
}
}
Эта зависимость также автоматически подключает основную библиотеку сериализации.
Настройка R8 для сериализации в Kotlin в проектах Android
Библиотека сериализации в Kotlin включает стандартные правила ProGuard, поэтому для сохранения сериализаторов всех сериализуемых классов после сокращения кода дополнительная настройка не требуется. Однако эти правила не применяются к классам с именованными объектами-компаньонами.
Чтобы сохранять сериализаторы классов с именованными объектами-компаньонами, добавьте в файл proguard-rules.pro правила, соответствующие используемому режиму совместимости:
# Serializer for classes with named companion objects are retrieved using getDeclaredClasses
# If you have any such classes, replace the examples below with your own
-keepattributes InnerClasses # Required for getDeclaredClasses
-if @kotlinx.serialization.Serializable class
com.example.myapplication.HasNamedCompanion, # <-- List serializable classes with named companions
com.example.myapplication.HasNamedCompanion2
{
static **$* *;
}
-keepnames class <1>$$serializer { # Using -keepnames is enough for the serializer() call to reference the class correctly
static <1>$$serializer INSTANCE;
}
# Serializer for classes with named companion objects are retrieved using getDeclaredClasses
# If you have any such classes, replace the examples below with your own
-keepattributes InnerClasses # Required for getDeclaredClasses
-if @kotlinx.serialization.Serializable class
com.example.myapplication.HasNamedCompanion, # <-- List serializable classes with named companions
com.example.myapplication.HasNamedCompanion2
{
static **$* *;
}
-keepnames class <1>$$serializer { # Using -keepnames is enough for the serializer() call to reference the class correctly
static <1>$$serializer INSTANCE;
}
# Keep both serializer and serializable classes to save the attribute InnerClasses
-keepclasseswithmembers, allowshrinking, allowobfuscation, allowaccessmodification class
com.example.myapplication.HasNamedCompanion, # <-- List serializable classes with named companions
com.example.myapplication.HasNamedCompanion2
{
*;
}
Сериализация объектов в JSON
В Kotlin можно сериализовать объекты в JSON с помощью библиотеки kotlinx.serialization.
Чтобы сделать класс сериализуемым, необходимо пометить его аннотацией @Serializable. Эта аннотация указывает компилятору сгенерировать код, необходимый для сериализации и десериализации экземпляров класса. Подробнее см. в разделе Аннотация @Serializable.
Рассмотрим пример:
-
Импортируйте объявления из необходимых библиотек сериализации:
import kotlinx.serialization.* import kotlinx.serialization.json.*
-
Сделайте класс сериализуемым, пометив его аннотацией
@Serializable:@Serializable data class Book(val yearPublished: Int, val title: String)
-
Используйте функцию
Json.encodeToString(), чтобы сериализовать экземпляр этого класса:// Imports declarations from the serialization and JSON handling libraries import kotlinx.serialization.* import kotlinx.serialization.json.* // Marks the Book class as serializable @Serializable data class Book(val yearPublished: Int, val title: String) fun main() { // Serializes an instance of the Book class into a JSON string val json = Json.encodeToString(Book(1937, "The Hobbit")) println(json) // {"yearPublished":1937,"title":"The Hobbit"} }В результате вы получите строку, содержащую состояние этого объекта в формате JSON:
{"yearPublished":1937,"title":"The Hobbit"}
Десериализация объектов из JSON
Десериализация преобразует строку JSON обратно в объект.
Чтобы десериализовать объект из JSON в Kotlin:
-
Импортируйте объявления из необходимых библиотек сериализации:
import kotlinx.serialization.* import kotlinx.serialization.json.*
-
Сделайте класс сериализуемым, пометив его аннотацией
@Serializable:@Serializable data class Book(val yearPublished: Int, val title: String)
-
Используйте функцию
Json.decodeFromString(), чтобы десериализовать объект из JSON:// Imports declarations from the serialization and JSON handling libraries import kotlinx.serialization.* import kotlinx.serialization.json.* // Marks the Book class as serializable @Serializable data class Book(val yearPublished: Int, val title: String) fun main() { // Deserializes a JSON string into an instance of the Book class val obj = Json.decodeFromString<Book>("""{"yearPublished":1937, "title": "The Hobbit"}""") println(obj) // Book(yearPublished=1937, title=The Hobbit) }
Поздравляем! Вы успешно сериализовали объект в JSON и десериализовали его обратно в объект в Kotlin.
Что дальше
Узнайте, как сериализовать базовые типы, например примитивы и строки, а также некоторые классы стандартной библиотеки, в разделе Сериализация встроенных типов.
Узнайте, как настраивать сериализацию классов и изменять поведение аннотации
@Serializableпо умолчанию, в разделе Сериализация классов.Узнайте больше об обработке данных JSON и настройке сериализации JSON в обзоре сериализации JSON.
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/serialization-get-started.html