Serialización de objetos en Kotlin: guía completa sobre bibliotecas y herramientas
La serialización es el proceso de convertir un objeto en un formato que se puede guardar (por ejemplo, en un archivo) o transmitir a través de una red (a través de API REST, mensajes de Kafka, etc.). El proceso inverso — la deserialización — restaura el objeto a partir de ese formato. En el ecosistema de Kotlin existen varias bibliotecas potentes para la serialización, cada una con sus propias características. En este artículo analizaremos cuatro enfoques principales: kotlinx.serialization, Gson, Moshi y Jackson.
1. kotlinx.serialization — la opción nativa para Kotlin
Desarrollada por JetBrains, la biblioteca kotlinx.serialization es el "estándar de oro" para proyectos Kotlin. Admite multiplataforma (JVM, JS, Native) y utiliza anotaciones para generar código 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 de uso
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("Iván", 30, "ivan@example.com")
// Serialización a JSON val jsonString = Json.encodeToString(user) println(jsonString) // {"name":"Iván","age":30,"email":"ivan@example.com"}
// Deserialización desde JSON val decoded = Json.decodeFromString<User>(jsonString) println(decoded) // User(name=Iván, age=30, email=ivan@example.com)}Características
- Null safety: soporte para campos nullable mediante
? - Polimorfismo: serialización de sealed class y jerarquías
- Formatos personalizados: JSON, CBOR, Protobuf, Properties
- Rendimiento: generación de código sin reflexión
2. Gson — el clásico de Google
Gson es una de las bibliotecas más antiguas para Java/Kotlin. Es simple de usar, pero utiliza reflexión, lo que puede reducir el rendimiento en grandes volúmenes de datos.
Configuración
implementation("com.google.code.gson:gson:2.10.1")Ejemplo
import com.google.gson.Gson
data class Product(val id: Int, val title: String, val price: Double)
fun main() { val gson = Gson() val product = Product(1, "Portátil", 79999.99)
// Serialización val json = gson.toJson(product) println(json) // {"id":1,"title":"Portátil","price":79999.99}
// Deserialización val restored = gson.fromJson(json, Product::class.java) println(restored) // Product(id=1, title=Portátil, price=79999.99)}Características
- Simplicidad: mínima configuración
- Flexibilidad:
TypeAdapterpersonalizados para tipos complejos - Desventajas: reflexión, sin soporte nativo para Kotlin data class (requiere plugin o
@JvmField)
3. Moshi — la alternativa moderna a Gson
Moshi de Square es una biblioteca ligera con soporte nativo para Kotlin. Utiliza generación de código mediante anotaciones, lo que la hace más rápida que Gson.
Configuración
implementation("com.squareup.moshi:moshi-kotlin:1.15.0")kapt("com.squareup.moshi:moshi-kotlin-codegen:1.15.0") // para generación de códigoEjemplo
import com.squareup.moshi.Moshiimport com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
@JsonClass(generateAdapter = true)data class Book(val isbn: String, val title: String, val authors: