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