android – 如何使用moshi反序列化泛型类成员?

android – 如何使用moshi反序列化泛型类成员?,第1张

概述我正在获取一个包含通用成员的 JSON对象(数据可以是几种不同的类型).该课程目前看起来像这样: @Parcelizedata class Children<T: Parcelable>( @Json(name = "type") val type: String, @Json(name = "data") val data: T): Parcelable 我如 我正在获取一个包含通用成员的 JSON对象(数据可以是几种不同的类型).该课程目前看起来像这样:

@Parcelizedata class Children<T: Parcelable>(        @Json(name = "type") val type: String,@Json(name = "data") val data: T): Parcelable

我如何能够使用moshi反序列化/映射正确的对象类型?

@Parcelizedata 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

或者像这样的实例怎么样?我应该注意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)}
总结

以上是内存溢出为你收集整理的android – 如何使用moshi反序列化泛型类成员?全部内容,希望文章能够帮你解决android – 如何使用moshi反序列化泛型类成员?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1126227.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存