Jackson serialize and deserialize Throwable types

I am having issues deserializing Throwable types after they have been serialized by my serializer.

The initial serialize works as expected:

["java.lang.RuntimeException",{"detailMessage":"blah","cause":["java.lang.RuntimeException",{"@id":"a96e5aa2-1fe1-4d24-b91d-346b496af5e2","detailMessage":"blah","cause":"a96e5aa2-1fe1-4d24-b91d-346b496af5e2","stackTrace":[],"suppressedExceptions":["java.util.ArrayList",[]]}],"stackTrace":[],"suppressedExceptions":["java.util.ArrayList",[]]}]

However, the deserialization fails with Unexpected token (VALUE_STRING), expected START_ARRAY: need JSON Array to contain As.WRAPPER_ARRAY type information for class java.lang.Throwable

Caused by: com.fasterxml.jackson.databind.JsonMappingException: Unexpected token (VALUE_STRING), expected START_ARRAY: need JSON Array to contain As.WRAPPER_ARRAY type information for class java.lang.Throwable
 at [Source: ["java.lang.RuntimeException",{"detailMessage":"blah","cause":["java.lang.RuntimeException",{"@id":"a96e5aa2-1fe1-4d24-b91d-346b496af5e2","detailMessage":"blah","cause":"a96e5aa2-1fe1-4d24-b91d-346b496af5e2","stackTrace":[],"suppressedExceptions":["java.util.ArrayList",[]]}],"stackTrace":[],"suppressedExceptions":["java.util.ArrayList",[]]}]; line: 1, column: 170]
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:270)

I wrote a custom mixin that I have added to the ObjectMapper to support serialization, what am I missing for deserialization?

ObjectMapper

        final ObjectMapper objectMapper = new ObjectMapper();

        // Default JsonDataConverter config.
        objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
        objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

        // Serialize dates using ISO-8601 notation.
        objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

        // Support java.time.Instant (de)serialization.
        objectMapper.registerModule(new JavaTimeModule());

        // Support java.lang.Throwable (de)serialization.
        objectMapper.registerModule(new ThrowableModule());

        // Use instance fields when (de)serializing.
        objectMapper.setVisibility(
                objectMapper
                        .getSerializationConfig()
                        .getDefaultVisibilityChecker()
                        .withFieldVisibility(JsonAutoDetect.Visibility.ANY)
                        .withCreatorVisibility(JsonAutoDetect.Visibility.ANY)
                        .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                        .withIsGetterVisibility(JsonAutoDetect.Visibility.NONE)
                        .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
        );

ThrowableModule

public class ThrowableModule extends SimpleModule {

    public ThrowableModule() {
        super(ThrowableModule.class.getName());
    }

    @Override
    public void setupModule(final SetupContext context) {
        context.setMixInAnnotations(Throwable.class, ThrowableMixin.class);
    }

    private static abstract class ThrowableMixin {

        @JsonIdentityInfo(generator = ObjectIdGenerators.StringIdGenerator.class)
        private Throwable cause;

    }

}

Thanks