private <T> String asString(Object value, Class<T> valueClass) {
        T typedValue = valueClass.cast(value);
        Converter<T> converter = converterManager.getConverter(valueClass);
        if (converter != null) {
            return converter.asString(typedValue);
        } else if (typedValue instanceof Serializable) {
            return converterManager.getConverter(Serializable.class)
                    .asString((Serializable) typedValue);
        }
        return null;
    }