I am trying to understand how serialization/deserialization works in C++ without the use of libraries. I started with simple objects but when deserializing a vector, I found out, that I can’t get the vector without having written its size first. Moreover, I don’t know which file format I should choose, because, if digits exist before vector’s size I can’t read it right. Furthermore, I want to do that with classes and map containers. My task is to serialize/deserialize an object like this:
PersonInfo
{
unsigned int age_;
string name_;
enum { undef, man, woman } sex_;
}
Person : PersonInfo
{
vector<Person> children_;
map<string, PersonInfo> addrBook_;
}
Currently I know how to serialize simple objects like this:
vector<PersonInfo> vecPersonInfo;
vecPersonInfo.push_back(*personInfo);
vecPersonInfo.push_back(*oneMorePersonInfo);
ofstream file("file", ios::out | ios::binary);
if (!file) {
cout<<"can not open file";
} else {
vector<PersonInfo>::const_iterator iterator = vecPersonInfo.begin();
for (; iterator != vecPersonInfo.end(); iterator++) {
file<<*iterator;
}
Could you please suggest, how can I do this for this complex object or a good tutorial that explains it clearly?
One pattern is to implement an abstract class the defines functions for serialization and the class defines what goes into the serializer and what comes out. An example would be:
You then implement Serializable interface for the class/struct that you want to serialize:
Rest I believe you know. Here’s a few hurdles to pass though and can be done in your leisure:
Clues: