わかりましたので、次の 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 内の値に基づく
JCategory の 2 つのリストは 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 つのタイプのみを返すことができます。