Data classes Kotlin y bibliotecas de serialización
Las data classes de Kotlin son la forma idiomática de modelar JSON: generan automáticamente equals(), hashCode(), toString() y copy(). El generador produce declaraciones de data class con un constructor primario que lista cada propiedad. Las propiedades val se usan por defecto para inmutabilidad; un toggle cambia a var para modelos mutables.
Kotlinx.serialization es la biblioteca Kotlin-first mantenida por JetBrains, ampliamente utilizada en proyectos Kotlin Multiplatform y Ktor. El generador añade la anotación @Serializable a cada clase y @SerialName("key") a propiedades cuyos nombres difieren de la clave JSON. El modo Gson añade @SerializedName("key") para proyectos Android que aún usan Gson con Retrofit.
El modo Moshi genera anotaciones @JsonClass(generateAdapter = true) y @Json(name = "key") para anulaciones de nombres de propiedad. Moshi es popular en el desarrollo Android por su adaptador codegen de Kotlin que evita la reflexión en tiempo de ejecución.
Mapeo de tipos y propiedades nullable
Las cadenas JSON se convierten en String, los enteros en Int (o Long para valores grandes), los decimales en Double, los booleanos en Boolean y los arrays en List<T>. Los objetos anidados generan data classes separadas. Las propiedades que son null en algunos objetos JSON o ausentes en algunos elementos del array se tipan como T? (nullable) con un valor por defecto null en el constructor.
El sistema de tipos de Kotlin distingue los tipos no-null (T) de los nullable (T?) a nivel del lenguaje, lo que se mapea naturalmente a la distinción presencia/ausencia de JSON. El generador marca correctamente un campo como nullable cuando aparece null en el JSON de muestra o cuando falta en algunos objetos del array.
Para kotlinx.serialization, las propiedades con valores por defecto se omiten automáticamente durante la serialización cuando son iguales al valor por defecto. Esto significa que las propiedades nullable tipadas como T? = null se omiten de la salida serializada cuando son null.
Flujos de trabajo de Android y Kotlin Multiplatform
Los desarrolladores Android que usan Retrofit definen típicamente métodos de interfaz cuyo tipo de retorno es una data class de Kotlin. Pega la respuesta de la API, genera una data class con anotaciones Gson o Moshi y úsala como tipo de llamada de Retrofit.
Los proyectos Kotlin Multiplatform Mobile (KMM) comparten modelos de datos entre Android e iOS. Kotlinx.serialization es la biblioteca recomendada para KMM porque tiene soporte multiplataforma. Las data classes @Serializable generadas funcionan en todos los objetivos KMM sin modificación.
Los proyectos de servidor Ktor usan kotlinx.serialization de forma nativa. El generador produce data classes que puedes usar directamente como tipos de parámetros de manejadores de rutas de Ktor y cuerpos de respuesta.