0

わかりましたので、次の 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 / Prod2JProduct 内の値に基づく

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 つのタイプのみを返すことができます。
4

1 に答える 1