核心能力
实现C++结构体与JSON/XML/BSON/YAML等格式双向转换
支持MySQL/SQLite数据库ORM映射,简化数据持久化操作
零依赖头文件库设计,仅需包含头文件即可使用
高级特性
完整STL容器支持(vector/set/map等)及嵌套结构处理
提供位域处理、类继承支持、枚举类型转换能力
支持自定义编解码扩展机制,满足特殊场景需求
通过XPACK
宏实现非侵入式字段声明(如XPACK(O(name,age))
)
应用价值
简化数据序列化/反序列化流程,提升开发效率
宏编程教学典范,展示高阶宏技巧和SFINAE实现方法
适用于物联网设备通信、配置文件解析等场景
GitCode - 全球开发者的开源社区,开源代码托管平台GitCode是面向全球开发者的开源社区,包括原创博客,开源代码托管,代码协作,项目管理等。与开发者社区互动,提升您的研发效率和质量。https://gitcode.com/Universal-Tool/d19ba.git
1.使用Qt封装一个结构体与JSON数据,结构体与XML数据互转模块XmlJsonStructExchgMod;
2.使用Qt编写一个测试程序,在测试程序中使用XmlJsonStructExchgMod模块实现数据互转。
#ifndef XMLJSONSTRUCTEXCHGMOD_H
#define XMLJSONSTRUCTEXCHGMOD_H
#include
#include "xpack/json.h"
#include "xpack/xml.h"
#include
using namespace std;
#if defined(XMLJSONSTRUCTEXCHGMOD_LIBRARY)
# define XMLJSONSTRUCTEXCHGMOD_EXPORT Q_DECL_EXPORT
#else
# define XMLJSONSTRUCTEXCHGMOD_EXPORT Q_DECL_IMPORT
#endif
class XMLJSONSTRUCTEXCHGMOD_EXPORT XmlJsonStructExchgMod
{
public:
XmlJsonStructExchgMod();
~XmlJsonStructExchgMod();
template
static void JsonToStru(const std::string &data,T &val )
{
xpack::json::decode(data, val);
}
template
static std::string StruToJson(const T &val)
{
return xpack::json::encode(val);
}
template
static void XmlToStru(const std::string &data, T &val)
{
xpack::xml::decode(data, val);
}
template
static std::string StruToXml(const T &val)
{
return xpack::xml::encode(val,"root");
}
};
#endif // XMLJSONSTRUCTEXCHGMOD_H
#ifndef BASE_H
#define BASE_H
#include "xpack/xpack.h"
#include
using namespace std;
struct STransmissionBase
{
string id;//消息ID
string name;//消息命令名称
string type="01";//命令类型
int result=0;//命令结果码
XPACK(O(id,name,type,result))
};
template
struct STransmission:public STransmissionBase
{
S params;
XPACK(I(STransmissionBase),O(params))
};
struct SLoginResp{
string cuId;
int keepAlivePeriod;
string currentTime;
XPACK(O(cuId,keepAlivePeriod,currentTime))
};
struct SDepURL
{
string id;
string name;
string parentId;
string remark;
XPACK(O(id,name,parentId,remark))
};
struct SGroup
{
vector URL;
XPACK(O(URL))
};
//登录请求
struct SLoginReq{
string domainId;
string cuUserId;
string cuPassword;
string cuIp;
string cuPort;
string version;
string sysNodeId;
string manufacturerId;
string manufacturerName;
string protocolVersion;
int isFirstLogin;
XPACK(O(domainId,cuUserId, cuPassword,cuIp,cuPort,version,sysNodeId,manufacturerId,manufacturerName,protocolVersion,isFirstLogin))
};
#endif // BASE_H
#include
#include "xmljsonstructexchgmod.h"
#include "base.h"
#include
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
SDepURL dep,dep1;
dep.id = "210101";
dep.name ="cam1";
dep.remark = "gun cam";
dep.parentId = "2101";
dep1.id = "210102";
dep1.name ="cam2";
dep1.remark = "ball cam";
dep1.parentId = "2101";
#if 0
STransmission listInfo,listInfo1;
listInfo.id = "0x03030102";
listInfo.name = "getDepList";
listInfo.result = 0;
listInfo.type = "02";
listInfo.params.URL.push_back(dep);
listInfo.params.URL.push_back(dep1);
#else
SGroup group,group1;
group.URL.push_back(dep);
group.URL.push_back(dep1);
#endif
#if 1
string str = XmlJsonStructExchgMod::StruToJson(group);
qDebug() << "json str:" << str.data();
XmlJsonStructExchgMod::JsonToStru(str,group1);
qDebug() << "list size:"<< group1.URL.size();
STransmission req;
string str1 ="{\"id\":\"0x03030101\",\"name\":\"CuRegister\",\"type\":\"01\",\"result\":0,\"params\":{\"domainId\":\"210201A001000100\",\"cuUserId\":\"2102013008A09901\",\"cuPassword\":\"202cb962ac59075b964b07152d234b70\",\"cuIp\":\"192.168.22.53\",\"cuPort\":\"11111\",\"version\":\"1.0\",\"sysNodeId\":\"\",\"manufacturerId\":\"\",\"manufacturerName\":\"\",\"protocolVersion\":\"\",\"isFirstLogin\":0}}";
XmlJsonStructExchgMod::JsonToStru(str1,req);
qDebug() << "id:"<< req.id.data() <<" name:"<< req.name.data();
#else
string str = XmlJsonStructExchgMod::StruToXml(group);
qDebug() << "xml str:" << str.data();
XmlJsonStructExchgMod::XmlToStru(str,group1);
qDebug() << "list size:" << group1.URL.size();
#endif
return a.exec();
}
https://download.csdn.net/download/kk821521286/90952696