当前位置: 首页 > news >正文

常德建设局网站产品设计开发公司

常德建设局网站,产品设计开发公司,关于网站开发市问卷调查,jsp做网站 案例上一篇文章介绍了自动进行序列化和反序列化的方法#xff0c;其中也指出了其中存在的问题以及不足#xff0c;今天这篇文章来详细说下如何处理 背景 目前使用自动生成属性的方法支持的数据类型有限#xff0c;并不是所有的数据类型有支持#xff0c;不支持的类型生成的键值… 上一篇文章介绍了自动进行序列化和反序列化的方法其中也指出了其中存在的问题以及不足今天这篇文章来详细说下如何处理 背景 目前使用自动生成属性的方法支持的数据类型有限并不是所有的数据类型有支持不支持的类型生成的键值对的值会是 null肯定不是我们想要的因此需要对这些类型进行自定义扩展。 目前不支持的类型主要有以下几种场景 QRectQSizeQPointQListTQVectorT比如 QListintQListfloatQListdouble……QPolygon, QPolygonFQLineQLineFQMap, QSet,QHash……std 标准库数据类型其它自定义类型 原因 为什么上述类型不支持呢有两个原因 第一上述这些类型无法反向解析无法进行有效的区分比如你想把一个QSize 保存成什么样子 数组形式[10,10]字符串“QSize(10,10)” 不管哪种方式都不是通用的数组格式在反序列化时无法还原除非手动进行字符串方式有冗余字段无法满足三方使用。 第二其实不怪 QtJSON 的键值就支持这些类型,[侯捷] 曾说过「源码面前了无秘密」,我们再顺便看下Qt源码。 某个字段的值是这样获取的返回的是一个 QVariant 类型这个类型本身可以支持多种数据类型 QVariant v object-property(proName);将获取的键值插入到 QJsonObject 当中: jsObj.insert(proName, QJsonValue::fromVariant(v));问题就出在这里JSON 对象的值需要一个 QJsonValue 类型但是 QJsonValue 仅仅支持常见的基本数据类型 QJsonValue(Type Null);QJsonValue(bool b);QJsonValue(double n);QJsonValue(int n);QJsonValue(qint64 v);QJsonValue(const QString s);QJsonValue(QLatin1String s);QJsonValue(const QJsonArray a);QJsonValue(const QJsonObject o);基于上述两个原因我们能够做的只能是把其它类型转换成标准JSON 支持的类型。 方案 JSON作为通用的数据格式一般普遍做法需要针对特殊类型字段单独处理再反序列化时也需要单独处理下面以QPoint、QSize 两种类型为例详细展开说下: Q_PROPERTY(QSize testSize READ testSize WRITE setTestSize)Q_PROPERTY(QPoint testPoint READ testPoint WRITE setTestPoint)在进行序列化时判断该属性类型然后分别进行处理 switch (propertyType){case QMetaType::QSize: return serializeSize(value.toSize());case QMetaType::QSizeF: return serializeSize(value.toSizeF());default: throw KException{ QByteArray(Invalid type id ) QByteArray(QMetaType::typeName(propertyType))};}QSize和QSizeF 是类似的因此需要写一个模板来统一处理 template class Size static inline QVariant serializeSize(const Size size) {return QVariant(QJsonArray{size.width(), size.height()}); }扩展 一般我们能想到的是分别实现对QSize和QSizeF 进行处理这个时候你会写两个函数来处理进阶后你会写一个模板来处理那么再次进阶下怎么处理呢 来看一个更高级的用法(语法糖C17才有的) QJsonValue serializeSize(const std::variantQSize, QSizeF size) const {returnstd::visit([](const auto s) - QJsonArray {return {s.width(), s.height()};}, size); }上述代码可以参考开源项目: https://github.com/Skycoder42/QtJsonSerializer 总结 上述提供了一种方案和思路按照这个思路继续扩展其它数据类型即可如果感兴趣可以直接看这个开源项目https://github.com/Skycoder42/QtJsonSerializer 不过需要 Qt5.12 及以上版本才支持哦 如果想自己动手实现顺便深入学习下 Qt 元对象系统那么可以一起参与进来从零实现一个简易版本的序列化库: https://github.com/kevinlq/KSerialize. 授人以鱼不如授人以渔 方案和思路有了关键还是要多动手写起来,如果有问题随时留言交流。
http://www.pierceye.com/news/615548/

相关文章:

  • 公司网站的搭建方案做海报图片的网站
  • 纯文本网站建设小米发布会最新
  • 定制版网站建设费用网站服务器干啥
  • 漂亮的网站是什么建设出来的弄一个小程序要多少钱
  • 房地产网站模板 下载免费空间和域名
  • 通付盾 建设网站公司最新永久地域自动跳转
  • 宁波建网站选哪家好一点wordpress手机全部显示
  • 如何注册属于自己的网站做列表的网站
  • 网站公司seo杭州网站建设模板
  • 网站内链如何布局优化大师下载
  • 如何做网站需求表格清单电影购买网站怎么设计
  • 有口碑的常州网站建设家政公司网站建设方案
  • 用户体验设计师吉林网站seo
  • 便宜营销型网站建设优化建站多网站绑定域名
  • 什么网站教人做3d效果图网站建设电话销售不被挂断
  • 村级网站建设 不断增强免费logo设计图案创意
  • 做网站优化有什么途径什么类型的公司需要做建设网站的
  • 计算机毕设代做网站深圳自适应网站开发
  • 万网主机建设网站流程idc 网站备案
  • 收费用的网站怎么做珠海网站关键词推广
  • 学技巧网站制作网站建设税率多少
  • 高端网站设计平台网页设计模板的网站
  • 万网云服务器网站上线网站开发开票税率
  • 西安高端网站制作公司网站开发需要哪些知识
  • 不错的网站建设公网站建设产品展示型的
  • 泰安住房和城乡建设局网站东莞网站推广哪家好信息
  • 个人网站制作的选题意义简短干净三字公司起名
  • 网站卡密代理怎么做网站建设有关表格
  • 易语言可以做网站么永久免费linux云主机
  • 什么网站可以免费做视频软件网站广告推广价格