Android Kotlin Moshi自定义Json适配器
好吧,所以我有以下Json Pojo:
data class JCategory( val id: Int, val name: String, val image: String?, val color: String?, val categories: List<JCategory>?, val products: List<JProduct>? )
我想写一个海关反序列化器,所以最终的对象将如下所示:
data class Category( val id: Int, val name: String, val image: String?, val color: String?, val list: List<Any> )
基本上,映射是:
-
JCategory -> Category
-
JProduct -> Prod1 / Prod2
基于JProduct -> Prod1 / Prod2
的某个值
JCategory两个列表将联合为1,其中将包含更多的JCategory和Prod1 / Prod2。
根据Moshi的说法,这是一种有效且高效的映射此适配器中的数据的方法吗?
@FromJson fun fromJson(category: JCategory): CategoryProduct { val prods = category.products val cats = category.categories val list = mutableListOf<Any>() if (prods != null && prods.size > 0) { prods.forEach { list.add(if (it.isMain == 1) { P1( ... ) } else { P2( ... ) }) } } if (cats != null && cats.size > 0){ cats.forEach { list.add(fromJson(it)) } } return CategoryProduct( category.id, category.name, category.image.emptyToNull(), parsedColor, category.parentId, list ) }
请注意,我有一个JCategory和同一个对象的列表,所以我认为适配器会自动解析,但它不。 所以我尝试list.add(fromJson(it))
,它的工作。
所以我的问题是:
- 是
list.add(fromJson(it))
处理这种情况的正确方法? - 我如何根据内部的一些属性将对象映射到另一个对象? fromJson只能返回1种类型的变换对象。
我认为,递归是处理list(add(fromJson(it))
正确方式list(add(fromJson(it))
,主要问题是在结构内部,结构本身是递归的,正确的方法是将结构和引用展平到另一个对象类型。
关于第二,这也是结构不好的问题。 你可以通过继承来解决这个问题。 然后检查目标类型本身。
interface X { } data class A : X { } data class B : X { } @FromJson fun fromJson(json: C): X { }
- 如何解决:“错误:无法找到符号类…”转换后的Java类Kotlin?
- 如何在Android中使用kotlin获取片段中的资源ID?
- 相当于imageView的文本
- 如何在Kotlin中使用RetroFit2 responseBodyConverter?
- 如何在Android中创建一个文件的副本?
- 使用kapt时,Realm在Java / Kotlin项目中不生成RealmProxy类
- Kotlin库'rxkotlin-0.21.0.jar'具有不受支持的格式。 请更新库或插件
- 如何使用kotlin Android从Url读取JSON?
- 添加一个Fragment后,Android工作室分解了我的build.gradle文件