Item - A Serializable thing
- has children which need to be Items
String is an Item
Array is an Item
class SerializerVisitor
{
public:
void Enter(const char* name)
{
}
void Exit(const char* name)
{
}
void Visit(int32 var)
{
}
template <class T>
void Visit(const char* name, T var)
{
Enter(name);
Visit(var);
Exit(name);
}
template <class T>
void Visit(const char* name, T var)
{
Enter(name);
var.Visit(this);
Exit(name);
}
};
struct Person
{
int32 id;
string name;
Array<string> email;
Array<string> phoneNumbers;
// This can do both the serializing and de-serializing
// This might be good to have generated, but possibly being more explicit could be better too
template <class V>
void Visit(V& v)
{
v.Visit("id",id);
v.Visit("name",name);
v.Visit("email",email);
v.Visit("numbers",phoneNumbers);
}
}
If use JSON, then order of members doesn't matter
Also schema can change, have members added, reordered etc, and can still work
JSON doesn't handle member names changing
Pretty similar for XML
JSON and XML have heavy overhead in size and parsing / writing
EXI seperates the schema and data - avoids much of the overheads
Protocol Buffers? Looks like code generation
Pickling - Python specific