Variant convertVariant(IValue &value) { if (value.isObject()) { return deserialize(value); } else if (value.isArray()) { return Variant::make<std::vector<Variant>>( convertArray<Variant>(value, convertVariant)); } else { // This covers all non-object values // i.e values without a _typename entry return value.getVariant(); } }