struct2x
一个开源的C++结构体与JSON快速互转库,它可以快速实现结构体对象与JSON对象之间序列化及反序列化要求。快速、简洁的 API 设计,大大降低直接使用JSON解析库来实现此类功能的代码复杂度。支持Json的同时也支持protobuf和结构体对象之间的互转。
为什么要支持Protobuf,重复造轮子?
Goolge的原生C++解析库功能又太强大,代码膨胀较大,像反射、定义service很多时候都用不到。目前第三方的解析库都是C语言版的,序列化时需要手动分配内存,使用成本偏高。不支持enum,建议使用int32代替。sfixed32、sfixed64留有接口,暂未实现转换。
如何使用
1.支持C++结构体和json的互转
包含struct2x.h文件。
结构体如下:
struct struItem {
int id;
std::string str;
std::vector<std::string> v;
std::vector<struInfo> v2;
std::map<std::string, int> m;
std::map<std::string, struInfo> m2;
//使用该模板函数,指定struct中需要转为json的变量,必须为public
template<typename T>
void serialize(T& t) {
SERIALIZATION(t, id, str, v, v2, m, m2);
}
};
也可在struct外部使用非侵入式C++结构体序列化:
template<typename T>
void serialize(T& t, struItem& item) {
NISERIALIZATION(t, item, id, str, v, v2, m, m2);
}
生成json时会优先使用非侵入式。
2.支持protobuf和json的互转
编写proto文件,使用tool/protoc可执行文件,命令行执行./protoc --struct_out=./ test.proto,即可生成相应的C++文件。
struExamples items;
// items赋值 ...
// 序列化
serialization::BufferWrapper buffer;
serialization::PBEncoder encoder(buffer);
encoder << items;
// 反序列化
struExamples items2;
serialization::PBDecoder decoder(buffer.data(), buffer.size());
decoder >> items2;
示例见 tester/main.cpp。
沟通交流,QQ群:977208341。