braveryzhangsan / struct2x

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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。

About


Languages

Language:C++ 98.2%Language:CMake 1.8%