Sérialisation Qt
La sérialisation a pour but d’enregistrer l’état d’un objet afin de pouvoir le recréer en cas de besoin. Elle vous permet d’effectuer des actions telles que :
- Envoyer l’objet à une application distante à l’aide d’un service web
- Transmettre l’objet sous forme de chaîne JSON ou XML
- Enregistrer et restaurer des informations utilisateur ou les partager entre applications
L'API Qt prend en charge la sérialisation pour plusieurs cas d'utilisation :
- La prise en chargede JSON dans Qt offre une API C++ facile à utiliser pour analyser, modifier et enregistrer des données JSON. La prise en charge de CBOR dans Qt est un format compact d’encodage de données binaires qui constitue un sur-ensemble de JSON.
- QDataStream Elle permet la sérialisation de données binaires vers un QIODevice
- Qt XML C++ Classes fournit des implémentations C++ des normes XML Streaming et DOM pour le format XML
- CBOR est l’implémentation par Qt du format de sérialisation CBOR.
- QSettings Permet de sérialiser et de stocker des paramètres d’application indépendants de la plateforme.
Avantages de JSON et CBOR
Lorsque vous utilisez JSON, les informations sont stockées dans un fichier « QJsonObject » et un « QJsonDocument » se charge de transmettre les valeurs vers un fichier « QByteArray ».
Par exemple
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 présente plusieurs avantages :
- Le JSON textuel est déclaratif, ce qui le rend lisible par l’utilisateur
- Les informations sont structurées
- L'échange d'informations génériques est facile
- JSON permet d’enrichir les messages avec des valeurs supplémentaires
- Il existe de nombreuses solutions pour recevoir et analyser du JSON dans les environnements cloud
Le CBOR (Concise Binary Object Representation) est un format d'encodage de données binaires très compact qui constitue un sur-ensemble de JSON. Il a été créé par le groupe de travail CoRE (Constrained RESTful Environments) de l'IETF et est utilisé dans de nombreuses nouvelles RFC. Le CBOR partage de nombreux avantages du JSON, mais sacrifie la lisibilité humaine au profit de la compacité.
Avantages des classes QDataStream
QDataStream C'est une option viable lorsque l'ensemble du flux de données est déterminé et ne devrait pas changer. De plus, le lecteur et l'éditeur des données doivent tous deux être écrits en Qt.
L’ajout de la prise en charge de cette fonctionnalité à une classe nécessite deux opérateurs supplémentaires. Par exemple, pour une classe nommée `SensorInformation` :
QDataStream &operator<<(QDataStream &, const SensorInformation &);
QDataStream &operator>>(QDataStream &, SensorInformation &);L’implémentation de la sérialisation est présentée ci-dessous :
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 désérialisation fonctionne de manière similaire, mais utilise l'opérateur ` >> `. Par exemple : ` out >> item.m_id`, etc.
En général, l’utilisation d’ QDataStream est plus rapide que l’utilisation du format JSON textuel.
Avantages des classes C++ de type « Qt XML »
Qt fournit à la fois des classes DOM et des classes basées sur les flux pour lire et écrire du contenu XML.
Qt fournit la classe ` QDomDocument ` qui représente le document XML, ainsi que deux classes permettant de lire et d’écrire le XML via une API de flux simple : ` QXmlStreamReader ` et ` QXmlStreamWriter`.
Les classes DOM XML
QDomDocument représente l'intégralité du document XML. Elle constitue la racine de l'arborescence du document et offre un accès principal aux données du document.
Les classes XML basées sur les flux
Un lecteur de flux présente un document XML sous la forme d’un flux de tokens. Cela diffère de SAX, car les applications SAX fournissent des gestionnaires pour recevoir les événements XML provenant de l’analyseur, tandis que l’ QXmlStreamReader e pilote la boucle, récupérant les tokens auprès du lecteur au fur et à mesure des besoins. Cette approche par extraction permet de construire des analyseurs récursifs descendants, ce qui permet de diviser le code d’analyse XML en différentes méthodes ou classes.
QXmlStreamReader un analyseur syntaxique pour le XML 1.0 bien formé, à l’exclusion des entités analysées externes. Par conséquent, les données fournies au lecteur de flux doivent respecter les critères du W3C relatifs au XML bien formé, faute de quoi une erreur sera levée. Des fonctions telles que ` atEnd()`, ` error()` et ` hasError() ` peuvent être utilisées pour détecter ces erreurs et obtenir une description de celles-ci.
La méthode QXmlStreamWriter est une API de flux qui se charge d’ajouter le préfixe aux espaces de noms, lorsque l’URI de l’espace de noms (namespaceUri) est spécifié lors de l’écriture d’éléments ou d’attributs.
Classes fournissant la sérialisation
Contient des définitions communes aux classes de flux (QCborStreamReader et QCborStreamWriter) et à QCborValue | |
Utilisée pour contenir un tableau d’éléments CBOR | |
Utilisée pour contenir un conteneur associatif représentable en CBOR | |
Décodeur de flux CBOR simple, fonctionnant soit sur un QByteArray, soit sur un QIODevice | |
Encodeur CBOR simple fonctionnant sur un flux unidirectionnel | |
Encapsule une valeur en CBOR | |
Sérialisation de données binaires vers un QIODevice | |
Encapsule un tableau JSON | |
Moyen de lire et d'écrire des documents JSON | |
Encapsule un objet JSON | |
Utilisé pour signaler les erreurs lors de l'analyse JSON | |
Encapsule une valeur au format JSON | |
Interface pratique pour lire et écrire du texte | |
Analyseur rapide permettant de lire des documents XML 1.0 bien formés via une API de streaming simple | |
Écrivain XML 1.0 avec une API de streaming simple |
© 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.