У меня есть класс данных, в котором есть поле Uri:
data class MyDataClass(
@JsonSerialize(using = JacksonUriSerializer::class)
@JsonDeserialize(using = JacksonUriDeserializer::class)
@param:JsonProperty(value = "uri")
@get:JsonProperty(value = "uri")
val uri: Uri
)
И следующий пользовательский сериализатор/десериализатор:
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() {
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() {
override fun deserialize(
jsonParser: JsonParser,
deserializationContext: DeserializationContext?
): Uri {
return jsonParser.valueAsString.toUri()
}
}
Сериализация/десериализация работает нормально, когда приложение работает в варианте отладочной сборки. Но когда я запускаю его в варианте сборки выпуска, выдается следующее исключение:
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"]
->...
Я использую версию 2.17.2 Джексона, и мои текущие правила защиты для Джексона:
-dontwarn com.fasterxml.jackson.core.type.TypeReference
-keep class * extends com.fasterxml.jackson.core.type.TypeReference {
();
}
Примечание:
1 — я пытался добавить аннотацию @Keep в пользовательский сериализатор/десериализатор (это не дало эффекта)
2 - Я пытался добавить следующие правила proguard, но безрезультатно:
-keep class * extends com.fasterxml.jackson.databind.JsonSerializer { *; }
-keep class * extends com.fasterxml.jackson.databind.JsonDeserializer { *; }
Подробнее здесь: https://stackoverflow.com/questions/791 ... ld-variant
Пользовательский сериализатор Джексона не работает в варианте сборки выпуска ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение