void to_json(json& j, const MyObject& o);
void from_json(const json& j, MyObject& o);
void to_binary(binary_buffer& b, const MyObject& o);
void from_binary(const binary_buffer& b, MyObject& o);ISerializer с виртуальными write() под каждый тип поля, а у MyObject — void serialize(ISerializer&) const и void deserialize(IDeserializer&). JSON и binary тогда просто разные реализации этих интерфейсов, без accept()/visit() зоопарка. Visitor понадобится только если появится реальная иерархия объектов.