Sérialisation Qt
Le but de la sérialisation est de sauvegarder l'état d'un objet afin de pouvoir le recréer en cas de besoin. Elle vous permet d'effectuer des actions telles que
- l'envoi de l'objet à une application distante à l'aide d'un service web
- Transmettre l'objet sous la forme d'une chaîne JSON ou XML
- Sauvegarder et restaurer les informations de l'utilisateur ou les partager entre les applications.
L'API Qt prend en charge la sérialisation pour plusieurs cas d'utilisation :
- Le supportJSON dans Qt fournit une API C++ facile à utiliser pour analyser, modifier et sauvegarder des données JSON. La prise en charge de CBOR dans Qt est une forme compacte d'encodage de données binaires qui est un surensemble de JSON.
- QDataStream CBOR permet la sérialisation de données binaires dans un fichier JSON. QIODevice
- Qt XML C++ Classes fournit des implémentations C++ des standards XML Streaming et DOM pour XML
- CBOR est l'implémentation de Qt pour le format de sérialisation CBOR.
- QSettings fournit un moyen de sérialiser et de stocker des paramètres d'application indépendants de la plate-forme.
Avantages de JSON et CBOR
Lorsque vous utilisez JSON, les informations sont stockées dans un QJsonObject et un QJsonDocument se charge de diffuser les valeurs dans un 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 :
- JSON textuel est déclaratif, ce qui le rend lisible pour les humains.
- L'information est structurée
- L'échange d'informations génériques est facile
- JSON permet d'ajouter des valeurs supplémentaires aux messages
- Il existe de nombreuses solutions pour recevoir et analyser JSON dans les solutions basées sur le cloud computing.
CBOR (Concise Binary Object Representation) est une forme très compacte d'encodage de données binaires qui est un surensemble de JSON. Il a été créé par le groupe de travail Constrained RESTful Environments (CoRE) de l'IETF et a été utilisé dans de nombreuses nouvelles RFC. CBOR partage de nombreux avantages avec JSON, mais sacrifie la lisibilité humaine à la compacité.
Avantages des classes QDataStream
QDataStream Le CBOR est une option viable lorsque l'ensemble du flux de données est déterminé et n'est pas sur le point de changer. En outre, le lecteur et l'auteur des données doivent être écrits en Qt.
L'ajout de ce support à 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 &);
La mise en œuvre de la sérialisation est illustré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 en utilisant l'opérateur >>. Par exemple, out >> item.m_id, et ainsi de suite.
En général, l'utilisation de QDataStream est plus rapide que l'utilisation de JSON textuel.
Avantages de Qt XML Classes C
Qt fournit à la fois des classes DOM et des classes basées sur les flux pour lire et écrire du contenu XML.
Qt XML fournit la classe QDomDocument qui représente le document XML et deux classes pour lire et écrire le XML par le biais d'une API de flux simple : QXmlStreamReader et QXmlStreamWriter.
La classe DOM XML Classes
QDomDocument représente l'ensemble du document XML. Elle est la racine de l'arbre du document et fournit l'accès principal aux données du document.
Les classes XML basées sur le flux
Un lecteur de flux rapporte un document XML sous la forme d'un flux de jetons. Cela diffère de SAX, car les applications SAX fournissent des gestionnaires pour recevoir les événements XML de l'analyseur, alors que QXmlStreamReader gère la boucle, en tirant les jetons du lecteur lorsqu'ils sont nécessaires. Cette approche permet de construire des analyseurs descendants récursifs, ce qui permet de diviser le code d'analyse XML en différentes méthodes ou classes.
QXmlStreamReader un analyseur pour le XML 1.0 bien formé, à l'exclusion des entités externes analysées. Par conséquent, les données fournies au lecteur de flux doivent respecter les critères du W3C pour un XML bien formé, faute de quoi une erreur sera soulevée. Des fonctions telles que atEnd(), error(), et hasError() peuvent être utilisées pour tester ces erreurs et en obtenir une description.
QXmlStreamWriter est une API de flux qui se charge de préfixer les espaces de noms, lorsque le namespaceUri est spécifié lors de l'écriture d'éléments ou d'attributs.
Classes qui assurent la sérialisation
Contient des définitions communes aux classes de streaming (QCborStreamReader et QCborStreamWriter) et à QCborValue. | |
Utilisé pour contenir un tableau d'éléments CBOR | |
Utilisé pour contenir un conteneur associatif représentable en CBOR | |
Décodeur de flux CBOR simple, fonctionnant sur un QByteArray ou un QIODevice | |
Encodeur CBOR simple fonctionnant sur un flux unidirectionnel | |
Encapsule une valeur dans 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 dans JSON | |
Interface pratique pour lire et écrire du texte | |
Analyseur rapide pour la lecture de documents XML 1.0 bien formés via une API de flux simple | |
Écrivain XML 1.0 avec une API de flux 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.