Si está en una plataforma Linux, puede usar directamente la json.h
biblioteca para la serialización. Aquí hay un código de muestra que he encontrado. Fuente: Serializador Json
//============================================================================
// Name : JsonTest.cpp
// Author : Manis Kumar Khedawat
//============================================================================
#include <iostream>
#include <json/json.h>
using namespace std;
struct objStruct{
string str;
int n1;
int n2;
};
typedef objStruct obj;
void serializeToJson(json_object *jObj,obj* pObj)
{
/*
string str;
int n1;
int n2;
*/
// Create json object for every member in struct Obj.
json_object *jstr = json_object_new_string (pObj->str.c_str());
json_object *jn1 =json_object_new_int(pObj->n1);
json_object *jn2 =json_object_new_int(pObj->n2);
// Add all above created object into jObj
json_object_object_add(jObj,"str",jstr);
json_object_object_add(jObj,"n1",jn1);
json_object_object_add(jObj,"n2",jn2);
// pObj is Serialzed into jObj
}
void deSerializeToJson(json_object *jObj,obj* pObj)
{
/*
string str;
int n1;
int n2;
*/
// Get every member as different json obj from jObj
json_object *jstr = json_object_object_get (jObj,"str");
json_object *jn1 =json_object_object_get(jObj,"n1");
json_object *jn2 =json_object_object_get(jObj,"n2");
pObj->str=json_object_get_string(jstr);
pObj->n1=json_object_get_int(jn1);
pObj->n2=json_object_get_int(jn2);
// jObj is DeSerialzed into pObj
}
int main() {
// Lets Create an Object which we will serialze into Json
obj obj1;
obj1.n1=3;
obj1.n2=6;
obj1.str="This is String";
// Create a json Object
json_object* jObj=json_object_new_object();
// To serialize into Json Object
// Please Keep in mind , we are passing address of object (pointer) & not object
serializeToJson(jObj,&obj1);
obj obj2;
// To serialize into Json Object
// Please Keep in mind , we are passing address of object (pointer) & not object
deSerializeToJson(jObj,&obj2);
cout<<"String str == "<<obj2.str<<endl;
cout<<"n1 & n2 : "<<obj2.n1<<" "<<obj2.n2<<endl;
return 0;
}