En esta página

Serialización en Qt

El propósito de la serialización es guardar el estado de un objeto para poder recrearlo cuando sea necesario. Permite realizar acciones como:

  • Enviar el objeto a una aplicación remota mediante un servicio web
  • Pasar el objeto como una cadena JSON o XML
  • Guardar y restaurar la información del usuario o compartirla entre aplicaciones

La API de Qt proporciona soporte para la serialización para varios casos de uso:

  • El soporteJSON en Qt proporciona una API C++ fácil de usar para analizar, modificar y guardar datos JSON. El soporte CBOR en Qt es una forma compacta de codificación de datos binarios que es un superconjunto de JSON.
  • QDataStream proporciona serialización de datos binarios a un QIODevice
  • Qt XML C++ Classes proporciona implementaciones C++ de los estándares XML Streaming y DOM para XML
  • CBOR es la implementación de Qt para el formato de serialización CBOR.
  • QSettings proporciona una forma de serializar y almacenar configuraciones de aplicaciones independientes de la plataforma.

Ventajas de JSON y CBOR

Cuando se utiliza JSON la información se almacena en un QJsonObject y un QJsonDocument se encarga de transmitir los valores a un QByteArray.

Por ejemplo

QJsonObject jobject;
jobject["SensorID"] = m_id;
jobject["AmbientTemperature"] = m_ambientTemperature;
jobject["ObjectTemperature"] = m_objectTemperature;
jobject["AccelerometerX"] = m_accelerometerX;
jobject["AccelerometerY"] = m_accelerometerY;
jobject["AccelerometerZ"] = m_accelerometerZ;
jobject["Altitude"] = m_altitude;
jobject["Light"] = m_light;
jobject["Humidity"] = m_humidity;
QJsonDocument doc( jobject );

return doc.toJson();

JSON tiene varias ventajas:

  • JSON textual es declarativo, lo que lo hace legible para los humanos
  • La información está estructurada
  • El intercambio de información genérica es fácil
  • JSON permite ampliar los mensajes con valores adicionales
  • Existen muchas soluciones para recibir y analizar JSON en soluciones basadas en la nube

CBOR es la Representación Concisa de Objetos Binarios, una forma muy compacta de codificación de datos binarios que es un superconjunto de JSON. Fue creada por el grupo de trabajo Constrained RESTful Environments (CoRE) del IETF, y se ha utilizado en muchas nuevas RFC. CBOR comparte muchas de las ventajas de JSON, pero sacrifica la legibilidad humana por la compacidad.

Ventajas de las clases QDataStream

QDataStream es una opción viable cuando todo el flujo de datos está determinado y no va a cambiar. Además, tanto el lector como el escritor de los datos deben estar escritos en Qt.

Añadir soporte para esto a una clase requiere dos operadores adicionales. Por ejemplo, para una clase llamada SensorInformation:

QDataStream &operator<<(QDataStream &, const SensorInformation &);
QDataStream &operator>>(QDataStream &, SensorInformation &);

La implementación para la serialización se muestra a continuación:

QDataStream &operator<<(QDataStream &out, const SensorInformation &item)
{
    QDataStream::FloatingPointPrecision prev = out.floatingPointPrecision();
    out.setFloatingPointPrecision(QDataStream::DoublePrecision);
    out << item.m_id
        << item.m_ambientTemperature
        << item.m_objectTemperature
        << item.m_accelerometerX
        << item.m_accelerometerY
        << item.m_accelerometerZ
        << item.m_altitude
        << item.m_light
        << item.m_humidity;
    out.setFloatingPointPrecision(prev);
    return out;
}

La deserialización funciona de forma similar, pero utilizando el operador >>. Por ejemplo, out >> item.m_id, y así sucesivamente.

Usualmente, usar QDataStream es más rápido que usar JSON textual.

Ventajas de Qt XML Clases C

Qt proporciona tanto clases DOM como clases basadas en flujos para leer y escribir contenido XML.

Qt proporciona la clase QDomDocument que representa el documento XML y dos clases para leer y escribir el XML a través de una sencilla API de streaming: QXmlStreamReader y QXmlStreamWriter.

La clase DOM XML

QDomDocument representa el documento XML completo. Es la raíz del árbol del documento y proporciona el acceso principal a los datos del documento.

Las clases XML basadas en flujo

Un lector de flujo presenta un documento XML como un flujo de tokens. Esto difiere de SAX, ya que las aplicaciones SAX proporcionan manejadores para recibir eventos XML del analizador, mientras que QXmlStreamReader maneja el bucle, extrayendo tokens del lector cuando son necesarios. Este enfoque de extracción hace posible construir analizadores descendentes recursivos, lo que permite dividir el código de análisis XML en diferentes métodos o clases.

QXmlStreamReader un analizador sintáctico para XML 1.0 bien formado, excluyendo las entidades externas analizadas. Por lo tanto, los datos proporcionados al lector de secuencias se ajustan a los criterios del W3C para XML bien formado, o se producirá un error. Se pueden utilizar funciones como atEnd(), error() y hasError() para comprobar la existencia de tales errores y obtener una descripción de los mismos.

QXmlStreamWriter es una API de transmisión que se encarga de anteponer prefijos a los espacios de nombres, cuando se especifica el namespaceUri al escribir elementos o atributos.

Clases que proporcionan serialización

<QtCborCommon>

Contiene definiciones comunes tanto a las clases de streaming (QCborStreamReader y QCborStreamWriter) como a QCborValue

QCborArray

Se utiliza para contener una matriz de elementos CBOR

QCborMap

Se utiliza para contener un contenedor asociativo representable en CBOR

QCborStreamReader

Decodificador CBOR simple, que opera sobre QByteArray o QIODevice

QCborStreamWriter

Codificador CBOR simple que opera sobre un flujo unidireccional

QCborValue

Encapsula un valor en CBOR

QDataStream

Serialización de datos binarios a un QIODevice

QJsonArray

Encapsula un array JSON

QJsonDocument

Forma de leer y escribir documentos JSON

QJsonObject

Encapsula un objeto JSON

QJsonParseError

Se utiliza para informar de errores durante el análisis sintáctico de JSON

QJsonValue

Encapsula un valor en JSON

QTextStream

Interfaz práctica para leer y escribir texto

QXmlStreamReader

Rápido analizador sintáctico para leer documentos XML 1.0 bien formados a través de una sencilla API de streaming

QXmlStreamWriter

Escritor XML 1.0 con una sencilla API de streaming

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.