I have a data class that has an Uri
field in it:
data class MyDataClass(
@JsonSerialize(using = JacksonUriSerializer::class)
@JsonDeserialize(using = JacksonUriDeserializer::class)
@param:JsonProperty(value = "uri")
@get:JsonProperty(value = "uri")
val uri: Uri
)
And the following custom serializer/deserializer:
import android.net.Uri
import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.databind.JsonSerializer
import com.fasterxml.jackson.databind.SerializerProvider
class JacksonUriSerializer : JsonSerializer<Uri>() {
override fun serialize(
value: Uri,
jsonGenerator: JsonGenerator,
serializerProvider: SerializerProvider?
) {
jsonGenerator.writeString(value.toString())
}
}
import android.net.Uri
import androidx.core.net.toUri
import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.databind.DeserializationContext
import com.fasterxml.jackson.databind.JsonDeserializer
class JacksonUriDeserializer : JsonDeserializer<Uri>() {
override fun deserialize(
jsonParser: JsonParser,
deserializationContext: DeserializationContext?
): Uri {
return jsonParser.valueAsString.toUri()
}
}
The serialization/deserialization works fine when the app is running on debug build variant. But when I run it on release build variant, the following exception is thrown:
Document nesting depth (1001) exceeds the maximum allowed (1000, from `StreamWriteConstraints.getMaxNestingDepth()`) (through reference chain...
->android.net.Uri$StringUri["canonicalUri"]
->android.net.Uri$HierarchicalUri["canonicalUri"]
->android.net.Uri$HierarchicalUri["canonicalUri"]
->...
I’m using the version 2.17.2
of Jackson
and my current proguard rules for jackson are:
-dontwarn com.fasterxml.jackson.core.type.TypeReference
-keep class * extends com.fasterxml.jackson.core.type.TypeReference {
<init>();
}
Obs.:
1 – I tried to add the @Keep
annotation to the custom serializer/deserializer (it had not effect)
2 – I tried to add the following proguard rules, with not effect:
-keep class * extends com.fasterxml.jackson.databind.JsonSerializer { *; }
-keep class * extends com.fasterxml.jackson.databind.JsonDeserializer { *; }
You need to sign in to view this answers