Spec-Zone.ru › Kotlin 2

Начало работы с сериализацией в 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>

Чтобы настроить плагин компилятора Kotlin для Bazel, воспользуйтесь примером из репозитория rules_kotlin. Команда Kotlin официально не поддерживает Bazel, а этот репозиторий ведётся независимо.

Добавление библиотеки в мультиплатформенный проект

Чтобы использовать сериализацию 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
{
    *;
}

Можно исключить сериализуемые классы, которые никогда не сериализуются во время выполнения, используя пользовательские правила ProGuard с более узкими спецификациями классов.

Сериализация объектов в JSON

В Kotlin можно сериализовать объекты в JSON с помощью библиотеки kotlinx.serialization.

Чтобы сделать класс сериализуемым, необходимо пометить его аннотацией @Serializable. Эта аннотация указывает компилятору сгенерировать код, необходимый для сериализации и десериализации экземпляров класса. Подробнее см. в разделе Аннотация @Serializable.

Рассмотрим пример:

  1. Импортируйте объявления из необходимых библиотек сериализации:

    import kotlinx.serialization.*
    import kotlinx.serialization.json.*
    
  2. Сделайте класс сериализуемым, пометив его аннотацией @Serializable:

    @Serializable
    data class Book(val yearPublished: Int, val title: String)
    

    Аннотация @Serializable включает сериализацию по умолчанию для всех свойств с полями хранения. Поведение сериализации можно настроить с помощью аннотаций на уровне свойств, необязательных свойств и других средств.

    Подробнее см. в разделе Сериализация классов.

  3. Используйте функцию 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"}

    Также можно сериализовать коллекцию объектов за один вызов:

    val bookList = listOf(Book(1937, "The Hobbit"), Book(1867, "War and Peace"))
    val jsonList = Json.encodeToString(bookList)
    

Десериализация объектов из JSON

Десериализация преобразует строку JSON обратно в объект.

Чтобы десериализовать объект из JSON в Kotlin:

  1. Импортируйте объявления из необходимых библиотек сериализации:

    import kotlinx.serialization.*
    import kotlinx.serialization.json.*
    
  2. Сделайте класс сериализуемым, пометив его аннотацией @Serializable:

    @Serializable
    data class Book(val yearPublished: Int, val title: String)
    
  3. Используйте функцию 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.

16 июня 2026 г.
СериализацияСериализация встроенных типов

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API