看来我找到了答案
class SkipBadListObjectsAdapterFactory : JsonAdapter.Factory {
override fun create(type: Type,annotations: MutableSet,moshi: Moshi): JsonAdapter? {
return if (annotations.isEmpty() && Types.getRawType(type) == List::class.java) {
val elementType = Types.collectionElementType(type,List::class.java)
val elementAdapter = moshi.adapter(elementType)
SkipBadListObjectsAdapter(elementAdapter)
} else {
null
}
}
private class SkipBadListObjectsAdapter(private val elementAdapter: JsonAdapter) :
JsonAdapter>() {
override fun fromJson(reader: JsonReader): List? {
val goodObjectsList = mutableListOf()
reader.beginArray()
while (reader.hasNext()) {
try {
elementAdapter.fromJson(reader)?.let(goodObjectsList::add)
} catch (e: JsonDataException) {
// Skip bad element ;)
}
}
reader.endArray()
return goodObjectsList
}
override fun toJson(writer: JsonWriter,value: List?) {
throw UnsupportedOperationException("SkipBadListObjectsAdapter is only used to deserialize objects")
}
}
}
谢谢“来自其他主题的人” =)