C++序列化开源库,三行代码即可完成转换

C++序列化开源库,三行代码即可完成转换

2022-09-30 0 1,271
资源编号 43917 最近更新 2022-09-30
¥ 0人民币 升级VIP
立即下载 注意事项
下载不了?请联系网站客服提交链接错误!
增值服务: 安装指导 环境配置 二次开发 模板修改 源码安装

本期推荐的是一个开源的C++序列化库——FdogSerialize。

C++序列化开源库,三行代码即可完成转换

FStruct是一个用于C++序列化的开源库,采用非入侵方式,无需在原有结构体上进行修改,目前支持基础类型,基础类型数组,结构体,以及vector,list,map等数据类型的序列化,支持JSON和XML两种数据格式,支持别名,支持忽略字段,最少三行代码即可完成转换。

功能特性

第一阶段

  • 支持由基础类型和Json互转
  • 支持由基础类型组成的数组和json互转
  • 支持由基础类型组合成结构体类型和Json互转
  • 支持由结构体包含结构体的类型和Json互转
  • 支持vector类型和json互转
  • 支持list类型和json互转
  • 支持map类型和json互转
  • 支持set类型和json互转

第二阶段

  • 支持STL和自定义类型多层嵌套
  • 对第一阶段所使用的接口进行优化,将多个接口整合为一个,方便调用

第三阶段

  • 支持对json字符串进行格式正确判断(开发中)
  • 支持获取某个字段是否存在(开发中)
  • 支持获取某个字段的值,而无须先进行序列化(开发中)

第四阶段

  • 支持必选字段和可选字段,当必选字段无值时,进行报错(定义为指针类型即为可选字段)(开发中)
  • 支持XML数据格式的转换(开发中)

杂项支持

  • 支持别名
  • 支持字段忽略
  • 支持忽略大小写
  • 支持字段为空,则不进行序列化(开发中)
  • 支持模糊转换(开发中)

类型支持

基于C++的基础类型,FdogSerialize支持十六种类型,只要你的结构体中最基本类型在这十六种范围之内,便可完成转换。

序号

基础类型

说明

序号

基础类型

说明

1

bool

布尔类型

9

unsigned int

无符号整型

2

char

无符号字符型

10

long

长整型

3

unsigned char

无符号字符型

11

unsigned long

无符号长整型

4

**char ***

字符指针(字符串类型)

12

long long

超长整型

5

short

短整型

13

unsigned long long

无符号超长整型

6

unsigned short

无符号短整型

14

float

单精度浮点类型

7

int

整型

15

double

双进度浮点类型

8

unsigned int

无符号整型

16

long double

长双进度浮点类型

最基本类型说明:

虽然school这个结构体包含了一种最基础类型和一种自定义类型,但追寻本质,自定义类型的底层都属于最基本类型。因此school这个结构体完全可以被正常解析,事实上是任意类型都可以解析。

struct headmaster{
	char * name;
	int age;
};

struct school{
	char * schoolName;
	headmaster info;
};

示例说明

序列化和反序列化各提供三个函数:

序列化调用函数

说明

FSerialize(string & json_, T & object_, string name = “”)

基础类型及结构体类型调用

FSerializeA(string & json_, T & object_, string name = “”)

数组,vector,list调用

FSerializeS(string & json_, T & object_, string name = “”)

set,map类型调用

反序列化调用函数

说明

FSerialize( T & object_, string & json_, string name = “”)

基础类型及结构体类型调用

FSerializeA( T & object_, string & json_, string name = “”)

数组,vector,list类型调用

FSerializeS( T & object_, string & json_, string name = “”)

set,map类型调用

1 基础类型序列化

#include "fdogserialize.h" //添加序列化所需头文件

int main()
{
	int value = 10;
    string json_;
    //将value转为json格式数据,建议使用第二种类型
    FdogSerialize::Instance()->FSerialize(json_, value); 			//json值为 "{10}"
    FdogSerialize::Instance()->FSerialize(json_, value, "value");   //json值为"{"value":10}"

    //将json格式数据转为value 需保证json_为正确格式字符串
    FdogSerialize::Instance()->FDesSerialize(value, json_);
    return 0;
}

2 基础类型数组序列化

#include "fdogserialize.h" //添加序列化所需头文件

int main()
{
    int valueArray[5] = {1,2,3,4,5};
    string json_;
    //将valueArray转为json格式数据,建议使用第二种类型
    FdogSerialize::Instance()->FSerialize(json_, value); 			//json值为 "{[1,2,3,4,5]}"
    FdogSerialize::Instance()->FSerialize(json_, value, "value");   //json值为"{"valueArray":[1,2,3,4,5]}"

    //将json格式数据转为value 需保证json_为正确格式字符串
    FdogSerialize::Instance()->FDesSerialize(value, json_);
}

3 基础类型组成的结构体序列化

#include "fdogserialize.h" //添加序列化所需头文件

//自定义基础类型结构体
struct student{
    char * name;
    int age;
};

int main()
{
    REGISTEREDMEMBER(student, name, age); //需要注册自定义类型,第一个参数为自定义结构体名,后面参数依次为成员名
    struct stu;
    stu.name = "花狗Fdog";
    stu.age = 22;
    string json_;
    //将value转为json格式数据
    FdogSerialize::Instance()->FSerialize(json_, value, "stu");   //json值为"{"stu":{"name":"花狗Fdog","age":22}}"

    //将json格式数据转为value 需保证json_为正确格式字符串
    FdogSerialize::Instance()->FDesSerialize(value, json_);
}

4 vector类型的序列化

#include "fdogserialize.h" //添加序列化所需头文件

//自定义基础类型结构体
struct student{
    char * name;
    int age;
};

int main()
{
    REGISTEREDMEMBER(student, name, age); //需要注册自定义类型,第一个参数为自定义结构体名,后面参数依次为成员名
    vector<student> stu;
    struct stu_1;
    stu_1.name = "花狗Fdog";
    stu_1.age = 22;
    
    struct stu_2;
    stu_2.name = "黑狗Fdog";
    stu_2.age = 23;
    
    stu.push_back(stu_1);
    stu.push_back(stu_2);
    
    string json_;
    //将value转为json格式数据
    FdogSerialize::Instance()->FSerializeA(json_, stu, "stu");   
    //json值为"{"stu":[{"name":"花狗Fdog","age":22},{"name":"黑狗Fdog","age":23}]}"

    //将json格式数据转为value 需保证json_为正确格式字符串
    FdogSerialize::Instance()->FDesSerializeA(value, json_);
}

5 list类型的序列化

#include "fdogserialize.h" //添加序列化所需头文件

//自定义基础类型结构体
struct student{
    char * name;
    int age;
};

int main()
{
    REGISTEREDMEMBER(student, name, age); //需要注册自定义类型,第一个参数为自定义结构体名,后面参数依次为成员名
    list<student> stu;
    struct stu_1;
    stu_1.name = "花狗Fdog";
    stu_1.age = 22;
    
    struct stu_2;
    stu_2.name = "黑狗Fdog";
    stu_2.age = 23;
    
    stu.push_back(stu_1);
    stu.push_back(stu_2);
    
    string json_;
    //将value转为json格式数据
    FdogSerialize::Instance()->FSerializeA(json_, stu, "stu");   
    //json值为"{"stu":[{"name":"花狗Fdog","age":22},{"name":"黑狗Fdog","age":23}]}"

    //将json格式数据转为value 需保证json_为正确格式字符串
    FdogSerialize::Instance()->FDesSerializeA(value, json_);
}

6 map类型的序列化

#include "fdogserialize.h" //添加序列化所需头文件

//自定义基础类型结构体
struct student{
    char * name;
    int age;
};

int main()
{
    REGISTEREDMEMBER(student, name, age); //需要注册自定义类型,第一个参数为自定义结构体名,后面参数依次为成员名
    vector<student> stu;
    struct stu_1;
    stu_1.name = "花狗Fdog";
    stu_1.age = 22;
    
    struct stu_2;
    stu_2.name = "黑狗Fdog";
    stu_2.age = 23;
    
    stu.push_back(stu_1);
    stu.push_back(stu_2);
    
    string json_;
    //将value转为json格式数据
    FdogSerialize::Instance()->FSerializeA(json_, stu, "stu");   
    //json值为"{"stu":[{"name":"花狗Fdog","age":22},{"name":"黑狗Fdog","age":23}]}"

    //将json格式数据转为value 需保证json_为正确格式字符串
    FdogSerialize::Instance()->FDesSerializeA(value, json_);
}

7 必要说明

//需要在宏Serialize_type_judgment_all定义下添加嵌套结构体
#define Serialize_type_judgment_all\
    Serialize_type_judgment(student)
	//依次添加
    
//需要在宏Serialize_type_judgment_all定义下添加嵌套结构体
#define DesSerialize_type_judgment_all\
    DesSerialize_type_judgment(student)
	//依次添加

//两个宏的定义准则:使用该自定义类型做为其他自定义类型的成员

杂项支持

杂项函数支持

说明

setAliasName(string Type, string memberName, string AliasName)

使用别名

setIgnoreField(string Type, string memberName)

忽略字段

setIgnoreLU(string Type, string memberName)

忽略大小写

setFuzzy(string Type)

模糊转换

1 支持别名

#include "fdogserialize.h" //添加序列化所需头文件

//自定义基础类型结构体
struct student{
    char * name;
    int age;
};

int main()
{
    REGISTEREDMEMBER(student, name, age); //需要注册自定义类型,第一个参数为自定义结构体名,后面参数依次为成员名
    FdogSerialize::Instance()->setAliasName("student", "name", "Aliasname"); 
    //第一个参数为类型,第二参数为原名,第三个参数为别名
    //除此之外,也可以使用setAliasNameAll设置多个参数的别名
    struct stu;
    stu.name = "花狗Fdog";
    stu.age = 22;
    string json_;
    FdogSerialize::Instance()->FSerialize(json_, value);   //json值为"{{"Aliasname":"花狗Fdog","age":22}}"
}

2 支持字段忽略

#include "fdogserialize.h" //添加序列化所需头文件

//自定义基础类型结构体
struct student{
    char * name;
    int age;
};

int main()
{
    REGISTEREDMEMBER(student, name, age); //需要注册自定义类型,第一个参数为自定义结构体名,后面参数依次为成员名
    FdogSerialize::Instance()->setIgnoreField("student", "name");  
    //第一个参数为类型,第二参数为需要忽略的字段
    //除此之外,也可以使用setIgnoreFieldAll设置多个忽略的字段
    struct stu;
    stu.name = "花狗Fdog";
    stu.age = 22;
    string json_;
    FdogSerialize::Instance()->FSerialize(json_, value);   //json值为"{{"age":22}}"
}

3 支持忽略大小写

当将json转为对象时,如json中的键值与对象中的成员名存在大小写不同,可以设定忽略大小写。

#include "fdogserialize.h" //添加序列化所需头文件

//自定义基础类型结构体
struct student{
    char * name;
    int age;
};

int main()
{
    REGISTEREDMEMBER(student, name, age); 
    struct stu;
    FdogSerialize::Instance()->setIgnoreLU("student", "name"); 
    string stu_json = "{\"Name\":\"yujing\", \"AGE\":21}";
    FdogSerialize::Instance()->FDesSerialize(json_, value);
}

4 支持模糊转换

若json和对象中的键值不相同,开启后将根据模糊等级进行匹配。

—END—

开源协议:Apache2.0

资源下载此资源为免费资源立即下载

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

七爪网 免费源码 C++序列化开源库,三行代码即可完成转换 https://www.7claw.com/43917.html

分享免费的开源源码

常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、七爪会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、七爪无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在七爪上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于七爪介入快速处理。
查看详情
  • 1、七爪作为第三方中介平台,依据交易合同(商品描述、交易前商定的内容)来保障交易的安全及买卖双方的权益; 2、非平台线上交易的项目,出现任何后果均与互站无关;无论卖家以何理由要求线下交易的,请联系管理举报。
查看详情

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务