Spe*_*ake 6 android retrofit moshi
我正在获取一个包含通用成员的 JSON 对象(数据可以是几种不同的类型)。该类目前如下所示:
@Parcelize
data class Children<T: Parcelable>(
@Json(name = "type") val type: String,
@Json(name = "data") val data: T
): Parcelable
Run Code Online (Sandbox Code Playgroud)
如何使用 moshi 反序列化/映射正确的对象类型?
@Parcelize
data class Comment<T : Parcelable>(
@Json(name = "replies") val replies: Children<T>,
@Json(name = "count") val count: Int,
@Json(name = "children") val childs: List<String>
) : Parcelable
Run Code Online (Sandbox Code Playgroud)
或者像这样的例子又如何呢?我应该注意的是Comment,可以采用通用参数,Comment从而导致循环。
在 MoshiExtensions 中添加以下内联并尝试相应地使用它们。
inline fun <reified E> Moshi.listAdapter(elementType: Type = E::class.java): JsonAdapter<List<E>> {
return adapter(listType<E>(elementType))
}
inline fun <reified K, reified V> Moshi.mapAdapter(
keyType: Type = K::class.java,
valueType: Type = V::class.java): JsonAdapter<Map<K, V>> {
return adapter(mapType<K, V>(keyType, valueType))
}
inline fun <reified E> listType(elementType: Type = E::class.java): Type {
return Types.newParameterizedType(List::class.java, elementType)
}
inline fun <reified K, reified V> mapType(
keyType: Type = K::class.java,
valueType: Type = V::class.java): Type {
return Types.newParameterizedType(Map::class.java, keyType, valueType)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2255 次 |
| 最近记录: |