Serialización de datos en el desarrollo móvil — qué es, formatos y principio de funcionamiento

Autor: IT Sectr Publicado: 2026-03-08 Tiempo de lectura: 8 min

La serialización es el proceso de convertir un objeto o estructura de datos en un formato secuencial adecuado para la transmisión por red o el almacenamiento en archivo. El proceso inverso, la deserialización, restaura los datos a su estado original. Según MDN Web Docs, la serialización es necesaria para cualquier comunicación entre procesos. La serialización es la base de las API REST, el almacenamiento en caché y el intercambio de datos entre componentes de la aplicación.

Puntos clave

  • Serialización — conversión de un objeto en un flujo de datos para su transmisión o almacenamiento
  • JSON — formato textual principal para API REST y comunicaciones web
  • Protobuf — formato binario con máxima eficiencia y compacidad
  • XML — formato estricto con validación para Enterprise y desarrollo Android
  • Elección del formato depende de los requisitos de rendimiento y compatibilidad

¿Qué es la serialización?

Serialización es el proceso de convertir un objeto que se encuentra en la memoria RAM en una secuencia lineal de bytes o caracteres que se puede transmitir por la red, guardar en un archivo o pasar a otro proceso. Sin serialización, la comunicación en red, la persistencia del estado y la interacción entre procesos serían imposibles.

La serialización incluye dos procesos opuestos. El proceso directo (serialización) empaqueta los datos en un formato de transmisión. El proceso inverso (deserialización) restaura los datos al objeto original. La deserialización es crítica para la seguridad: los datos de entrada incorrectos pueden provocar vulnerabilidades en la aplicación.

En el desarrollo de aplicaciones móviles, la serialización se utiliza en todas partes: envío de solicitudes al servidor y procesamiento de respuestas, guardado del estado de la aplicación al rotar la pantalla, almacenamiento en caché de datos en el disco y transferencia de datos entre pantallas mediante Intent (Android) o Segue (iOS).

Tareas principales de la serialización

  • Comunicación en red — transferencia de datos entre cliente y servidor
  • Persistencia de estado — guardado y restauración de datos de la aplicación
  • Almacenamiento en caché — guardado de resultados de solicitudes para acceso sin conexión
  • Multiplataforma — intercambio de datos entre sistemas en diferentes idiomas
  • Registro — serialización de objetos para escribir en registros

Principales formatos de serialización

Los formatos de serialización se dividen en textuales y binarios. Los formatos textuales (JSON, XML) son legibles por humanos y no requieren herramientas para su visualización. Los formatos binarios (Protobuf, FlatBuffers, MessagePack) son más compactos y rápidos, pero ilegibles sin deserialización. La elección del formato es un compromiso entre rendimiento y comodidad de depuración.

Además de JSON, XML y Protobuf, existen formatos especializados: FlatBuffers de Google para juegos y RA, MessagePack — un análogo binario compacto de JSON, Avro de Apache para big data en Kafka, YAML — un formato de configuración con soporte de comentarios.

Formato Tipo Esquema Tamaño Velocidad
JSON Texto Opcional Mediano Media
XML Texto XSD Grande Baja
Protobuf Binario Obligatorio Pequeño Alta
FlatBuffers Binario Obligatorio Pequeño Máxima
MessagePack Binario No Pequeño Alta
Avro Binario JSON Schema Pequeño Alta

Serialización en el desarrollo móvil

La serialización en plataformas móviles tiene sus particularidades: tráfico limitado, procesadores más débiles y la necesidad de conservar el estado durante las rotaciones de pantalla. En Android se utilizan Gson, Moshi, Kotlinx Serialization. En iOS — Codable, JSONSerialization, PropertyListEncoder. La elección correcta de la biblioteca afecta críticamente al rendimiento de la aplicación.

Kotlinx Serialization es una biblioteca moderna de JetBrains para Kotlin Multiplatform Mobile. Soporta JSON, Protobuf, CBOR y formatos personalizados. La generación de código ocurre en tiempo de compilación mediante el plugin Kotlin Serialization, lo que garantiza un alto rendimiento sin usar reflexión.

Kotlinx Serialization (Kotlin Multiplatform)

La biblioteca Kotlinx Serialization utiliza la anotación @Serializable para las clases y un plugin de compilador para generar serializadores. Esto garantiza un alto rendimiento y seguridad de tipos. El formato predeterminado es JSON, pero se soportan otros formatos mediante módulos adicionales.

kotlin
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.encodeToString
import kotlinx.serialization.decodeFromString

@Serializable
data class Project(
    val id: Int,
    val name: String,
    val platforms: List<String>,
    val active: Boolean
)

val json = Json {
    prettyPrint = true
    ignoreUnknownKeys = true
    encodeDefaults = true
}

fun main() {
    val project = Project(1, "MobileApp",
        listOf("Android", "iOS"), true)

    // Serialización
    val jsonString = json.encodeToString(project)

    // Deserialización
    val restored = json.decodeFromString<Project>(jsonString)
}

Codable en iOS (Swift)

El protocolo Codable es el mecanismo de serialización integrado en Swift. Combina los protocolos Encodable (serialización) y Decodable (deserialización). JSONEncoder y JSONDecoder manejan automáticamente estructuras anidadas, arrays, valores opcionales y claves personalizadas mediante CodingKeys.

swift
import Foundation

struct AppConfig: Codable {
    let appName: String
    let version: String
    let features: [String]
    let isProduction: Bool
}

let config = AppConfig(
    appName: "MyApp",
    version: "2.1.0",
    features: ["push", "analytics", "offline"],
    isProduction: true
)

let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]

guard let data = try? encoder.encode(config) else { return }
let jsonString = String(data: data, encoding: .utf8)

Rendimiento y comparación de formatos

El rendimiento de los formatos de serialización se evalúa mediante tres métricas: tamaño del mensaje, velocidad de serialización y velocidad de deserialización. Para aplicaciones móviles, las tres son críticas: el tamaño afecta el tráfico y el tiempo de carga, la velocidad afecta la capacidad de respuesta de la interfaz y el tiempo de inicio de la aplicación.

Protobuf y FlatBuffers muestran los mejores resultados gracias a la representación binaria. FlatBuffers destaca porque no requiere un paso separado de deserialización — los datos se leen directamente del búfer binario, lo que lo hace ideal para juegos y aplicaciones de RA con requisitos de latencia mínima. JSON sigue siendo el formato más popular para API REST, a pesar de su peor rendimiento, debido a su simplicidad y universalidad.

Escenario Formato recomendado Motivo
API REST JSON Universalidad, legibilidad, soporte
Microservicios Protobuf Compacidad, velocidad, gRPC
Juegos / RA FlatBuffers Zero-copy, latencia mínima
Big Data Avro Compatibilidad con Kafka y Hadoop
Configuración YAML Comentarios, legibilidad
Layouts Android XML Estándar de plataforma

Pruebas comparativas

Las pruebas prácticas con un conjunto de 1000 objetos de usuario muestran: Protobuf crea mensajes de 12 KB (JSON — 85 KB, XML — 120 KB). Tiempo de serialización: Protobuf — 2 ms, JSON — 8 ms, XML — 25 ms. Estas cifras hacen que los formatos binarios sean preferibles para sistemas de alta carga y aplicaciones móviles con tráfico limitado.

Ejemplos de serialización de datos

Los ejemplos muestran la serialización de un mismo objeto en diferentes formatos. Esto ayuda a comparar visualmente el tamaño y la legibilidad. El mismo objeto User se serializará en JSON, XML y Protobuf — se ve claramente que JSON es más compacto que XML, y Protobuf es el más compacto de todos, aunque ilegible.

Un objeto en tres formatos

JSON — sintaxis minimalista, claves entre comillas, valores de diferentes tipos. Ocupa 80 caracteres. La legibilidad es alta, la estructura visual es clara. Adecuado para API donde importa la velocidad de desarrollo y depuración.

XML — cada elemento está envuelto en etiquetas de apertura y cierre. Ocupa 150 caracteres. Legibilidad moderada, estructura estricta. Adecuado para flujos de documentos y sistemas que requieren validación XSD.

Protobuf — binario, 32 bytes para estos datos. Ilegible — requiere deserialización para visualizarse. El tamaño mínimo lo hace ideal para sistemas de alta carga y aplicaciones móviles.

json
{
  "id": 42,
  "name": "IT Sectr",
  "email": "team@itsectr.com",
  "role": "admin",
  "active": true
}
xml
<user>
    <id>42</id>
    <name>IT Sectr</name>
    <email>team@itsectr.com</email>
    <role>admin</role>
    <active>true</active>
</user>

Mejores prácticas de serialización

Las mejores prácticas ayudan a evitar errores típicos y elegir la estrategia de serialización adecuada para el proyecto. Seguir estas recomendaciones mejora el rendimiento, la seguridad y el mantenimiento del código.

Recomendaciones para el desarrollo móvil

  1. Elige el formato según el escenario — JSON para API REST, Protobuf para gRPC y microservicios
  2. Evita Java Serializable — mecanismo lento e inseguro, usa Kotlinx Serialization o Moshi
  3. Ignora claves desconocidas — configura el analizador para omitir campos ausentes en el modelo
  4. Almacena en caché los datos deserializados — evita analizar repetidamente los mismos datos
  5. Valida los datos de entrada — verifica límites y tipos durante la deserialización

Seguridad y serialización

La seguridad de la serialización es un aspecto crítico, especialmente al deserializar datos de fuentes no confiables. Los ataques de deserialización pueden provocar la ejecución remota de código (RCE), lo que la convierte en una de las vulnerabilidades más peligrosas en aplicaciones web y móviles. Los casos más conocidos están relacionados con Java Serializable y Python pickle.

Protobuf y JSON tienen protección integrada contra tales ataques, ya que trabajan solo con datos, no con objetos arbitrarios. Java Serializable, por el contrario, puede restaurar cualquier clase disponible en el classpath, lo que lo hace peligroso para recibir datos de fuentes externas. En Android, se recomienda usar Kotlinx Serialization o Moshi en lugar de la serialización Java estándar.

Medidas de seguridad adicionales: establece un límite en el tamaño de los datos de entrada, valida el esquema antes de la deserialización, no confíes en Content-Type de los encabezados HTTP, usa una lista blanca para las clases permitidas. Actualiza regularmente las bibliotecas de serialización, ya que periódicamente se descubren y corrigen vulnerabilidades.

Preguntas frecuentes

¿Cuál es la diferencia entre serialización y marshalling?

La serialización convierte un objeto en una secuencia de bytes, mientras que el marshalling transfiere datos entre diferentes espacios de direcciones conservando tipos y estructura. El marshalling incluye la serialización como parte del proceso, pero también puede incluir codificación de referencias y gestión de memoria.

¿Qué formato de serialización es el más rápido?

Los FlatBuffers de Google proporcionan la máxima velocidad gracias a la deserialización zero-copy — los datos se leen directamente del búfer binario sin transformación. Protobuf ocupa el segundo lugar, JSON el tercero. XML es el formato más lento de los comunes.

¿Qué elegir para Android: Gson, Moshi o Kotlinx Serialization?

Kotlinx Serialization es la mejor opción para proyectos nuevos en Kotlin: generación en compilación, soporte Kotlin Multiplatform, null safety. Moshi es una buena opción para proyectos en Java, más eficiente que Gson. Gson es la biblioteca más simple para empezar, pero es más lenta y usa reflexión.

¿Cómo serializar un objeto con referencias circulares?

Las referencias circulares provocan una recursión infinita durante la serialización. Soluciones: usa referencias por ID en lugar de referencias directas a objetos, aplica adaptadores de serialización especializados (por ejemplo, @JsonIgnore en Jackson), o rediseña el modelo de datos para eliminar ciclos.

¿Afecta la serialización a la seguridad de la aplicación?

, especialmente la deserialización de datos no confiables. Las vulnerabilidades de deserialización pueden provocar la ejecución remota de código. Recomendaciones: no deserialices datos de fuentes no confiables, usa una lista blanca de clases durante la deserialización y valida el esquema de datos antes del procesamiento.

Resumen

  • La serialización convierte objetos en un flujo de datos para transmisión y almacenamiento, la deserialización los restaura
  • JSON es el estándar para API REST, XML para flujos de documentos, Protobuf para microservicios y alta carga
  • Los formatos binarios (Protobuf, FlatBuffers) son 3–10 veces más compactos y rápidos que los textuales
  • En Android se recomienda Kotlinx Serialization, en iOS — Codable integrado
  • El almacenamiento en caché de datos deserializados reduce la carga de CPU y acelera la aplicación
  • La seguridad de la deserialización es crítica — valida los datos de entrada y usa una lista blanca
  • La elección del formato es un compromiso entre legibilidad, rendimiento y compatibilidad

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también