Я использую зерновые с c ++ для сериализации и десериализации JSON. Все мои Json объекты имеют базовый класс, такого рода сопоставления с JSON, например, так ...
["baseclass_var1", "baseclass_var2", 21321, {"derived_object_var1":"blah", "derived_object_var2":"blahblah"}]
Производный класс добавляет объект JSON в конце этого JSON массив и базовый класс вносят значения в массив.
Мои классы выглядят примерно так:
struct baseObject
{
baseObject()
{
}
template<typename Archive>
void serialize(Archive& archive)
{
archive.makeArray();
archive("baseclass_var1", "baseclass_var2", 21321);
}
};
struct derivedObject : baseObject
{
template<typename Archive>
void serialize(Archive& archive)
{
baseObject::serialize(archive);
archive.startNode();
cereal::nvp(archive, "derived_object_var1", "blah");
cereal::nvp(archive, "derived_object_var2", "blahblah");
archive.finishNode();
}
}
Я не могу не думать о том, насколько легко использовать злаки где структура JSON неявно определена, я мог бы ошибиться, вызвав явный вызов startNode()
, finishNode()
и makeArray()
? Есть ли альтернативная реализация, которая позаботилась бы о структуре JSON для меня, без необходимости явно указывать, где я хочу расположить подузел?