Serialization (kotlinx) para Kotlin: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué es kotlinx.serialization y para qué sirve?

\n\n

kotlinx.serialization es la biblioteca oficial de JetBrains para la serialización y deserialización de datos en Kotlin. Proporciona una forma potente, segura en tipos y multiplataforma de convertir objetos de Kotlin a varios formatos (JSON, Protobuf, CBOR, YAML y otros) y viceversa.

\n\n

Las principales razones para usar esta biblioteca son:

\n
    \n
  • Multiplataforma: Funciona en JVM, JS, Native (iOS, Android, Desktop).
  • \n
  • Seguridad de tipos: La serialización se verifica en tiempo de compilación, lo que elimina errores en tiempo de ejecución.
  • \n
  • Rendimiento: Utiliza reflexión solo cuando es necesario (a través del plugin del compilador).
  • \n
  • Flexibilidad: Soporta serializadores personalizados, polimorfismo, campos opcionales y mucho más.
  • \n
  • Integración con Kotlin: Aprovecha al máximo las capacidades del lenguaje (data class, sealed class, null safety).
  • \n
\n\n

Instalación y configuración

\n\n

Para usar kotlinx.serialization, debes agregar el plugin del compilador y la dependencia a tu proyecto.

\n\n

1. Agregar el plugin (build.gradle.kts):

\n
plugins {\n    kotlin("jvm") version "1.9.0" // o tu versión de Kotlin\n    kotlin("plugin.serialization") version "1.9.0"\n}
\n\n

2. Agregar la dependencia:

\n
dependencies {\n    implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")\n}
\n\n

3. Para Maven (pom.xml):

\n
<plugin>\n    <groupId>org.jetbrains.kotlin</groupId>\n    <artifactId>kotlin-maven-plugin</artifactId>\n    <version>1.9.0</version>\n    <configuration>\n        <pluginOptions>\n            <option>plugin:org.jetbrains.kotlin.plugin.serialization</option>\n        </pluginOptions>\n    </configuration>\n</plugin>\n\n<dependency>\n    <groupId>org.jetbrains.kotlinx</groupId>\n    <artifactId>kotlinx-serialization-json</artifactId>\n    <version>1.6.2</version>\n</dependency>
\n\n

Inicio rápido: primer ejemplo

\n\n
import kotlinx.serialization.Serializable\nimport kotlinx.serialization.json.Json\nimport kotlinx.serialization.encodeToString\nimport kotlinx.serialization.decodeFromString\n\n// 1. Definimos la clase serializable\n@Serializable\ndata class User(val name: String, val age: Int, val email: String? = null)\n\nfun main() {\n    // 2. Creamos un objeto\n    val user = User("Alice", 30, "alice@example.com")\n\n    // 3. Serializamos a JSON\n    val jsonString = Json.encodeToString(user)\n    println("JSON serializado: $jsonString")\n\n    // 4. Deserializamos de vuelta\n    val decodedUser = Json.decodeFromString<User>(jsonString)\n    println("Objeto deserializado: $decodedUser")\n}
\n\n

Salida:

\n
JSON serializado: {"name":"Alice","age":30,"email":"alice@example.com"}\nObjeto deserializado: User(name=Alice, age=30, email=alice@example.com)
\n\n

Métodos y funciones principales (8+)

\n\n

1. Json.encodeToString()

\n

Qué hace: Serializa un objeto de Kotlin a una cadena JSON.

\n

Parámetros:

\n
    \n
  • value (T) — objeto a serializar.
  • \n
  • serializer (Serializer<T>?) — serializador personalizado opcional.
  • \n
\n
val user = User("Bob", 25)\nval json = Json.encodeToString(user)\nprintln(json) // {"name":"Bob","age":25}
\n\n

2. Json.decodeFromString()

\n

Qué hace: Deserializa una cadena JSON a un objeto de Kotlin.

\n

Parámetros:

\n
    \n
  • string (String) — cadena JSON.
  • \n
  • des

Recommendations