Serialización de objetos en 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

Serialización de objetos en Kotlin: resumen de bibliotecas y guía práctica



La serialización es el proceso de convertir objetos complejos (clases, estructuras de datos) en un formato adecuado para almacenamiento o transmisión a través de una red (JSON, XML, Protobuf). La operación inversa — la deserialización — restaura el objeto desde dicho formato. En Kotlin, gracias a su concisión y seguridad de tipos, la serialización se implementa de manera especialmente elegante. En este artículo, analizaremos tres enfoques principales: la biblioteca estándar kotlinx.serialization, así como las populares soluciones Java Gson y Jackson, adaptadas para Kotlin.



1. kotlinx.serialization — la solución oficial de JetBrains



La biblioteca kotlinx.serialization es parte del ecosistema de Kotlin y cuenta con el respaldo de los desarrolladores del lenguaje. Ofrece un enfoque nativo sin reflexión, lo que garantiza un alto rendimiento y seguridad de tipos en tiempo de compilación.



Configuración (Gradle)

plugins {    kotlin("jvm") version "1.9.0"    kotlin("plugin.serialization") version "1.9.0"}

dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")}


Ejemplo: clase básica y serialización

import kotlinx.serialization.Serializableimport kotlinx.serialization.json.Json

@Serializabledata class User( val name: String, val age: Int, val email: String? = null)

fun main() { val user = User("Alexey", 30, "alex@example.com") val jsonString = Json.encodeToString(user) println(jsonString) // {"name":"Alexey","age":30,"email":"alex@example.com"}

val decoded = Json.decodeFromString<User>(jsonString) println(decoded) // User(name=Alexey, age=30, email=alex@example.com)}


Ventajas

  • Seguridad de tipos: los errores de serialización se detectan en tiempo de compilación.
  • Soporte multiplataforma: funciona en JVM, JS, Native (KMP).
  • Extensibilidad: serializadores personalizados para tipos complejos.
  • Soporte integrado para null, enum, sealed class, colecciones.


Ejemplo avanzado: objetos anidados y listas

@Serializabledata class Address(val city: String, val street: String)

@Serializabledata class Person(val name: String, val addresses: List<Address>)

fun main() { val person = Person("Maria", listOf( Address("Moscú", "Tverskaya"), Address("SPb", "Nevsky") )) val json = Json { prettyPrint = true } println(json.encodeToString(person)) // { // "name": "Maria", // "addresses": [ // { "city": "Moscú", "street": "Tverskaya" }, // { "city": "SPb", "street": "Nevsky" } // ] // }}


2. Gson — ligero y simple



La biblioteca Gson de Google es ampliamente conocida en el mundo Java. Para Kotlin se utiliza con configuración adicional para manejar correctamente los data class y los campos anulables.



Configuración

implementation("com.google.code.gson:gson:2.10.1")


Ejemplo con Gson

import com.google.gson.Gsonimport com.google.gson.reflect.TypeToken

data class Product(val id: Int, val title: String, val price: Double?)

fun main() { val gson = Gson() val product = Product(1, "Portátil", 75000.0) val json = gson.toJson(product) println(json) // {"id":1,"title":"Portátil","price":75000.0}

val back = gson.fromJson(json, Product::class.java) println(back) // Product(id=1, title=Portátil, price=75000.0)}


Características

  • No requiere anotaciones — funciona con cualquier clase.
  • Requiere especificar explícitamente el tipo al deserializar (puede ser incómodo con genéricos).
  • Por defecto no maneja

Recommendations