Usando Moshi con múltiples campos de input

Tengo un JSON que se ve así:

{ "name" : "Cnetworkingit Card", "code" : "AUD", "value" : 1000 } 

y estoy usando Moshi para unmarshall esto en una estructura de datos como:

 data class Account( @Json(name = "name") val name: String, @Json(name = "currency") val currency: String, @Json(name = "value") val value: Int ) 

Todo funciona bien Sin embargo, realmente me gustaría extraer los parameters de currency y value en un object Money separado. Entonces mi model se parece más a:

 data class Money( @Json(name = "currency") val currency: String, @Json(name = "value") val value: Int ) data class Account( @Json(name = "name") val name: String, @Json(name = "???") val money: Money ) 

El desafío con el que estoy luchando es cómo anotar las cosas para que el object Money pueda tener dos campos diferentes ( currency y value ) que provienen del mismo nivel que la count matriz.

¿Necesito crear un object intermedio "desemparejamiento" llamado, por ejemplo, MoshiAccount y luego usar un adaptador personalizado para convertirlo en mi object de Account real?

Vi cómo deserealizar una matriz int en una class personalizada con Moshi? que se ve cerca (excepto que en ese caso, el object adaptado (VideoSize) solo necesita un solo campo como input … en mi caso, necesito tanto la currency como el value )

Cualquier idea o sugerencia sería muy apreciada. Gracias

Los adaptadores de Moshi pueden transformar su estructura JSON para usted.

 object ADAPTER { private class FlatAccount( val name: String, val currency: String, val value: Int ) @FromJson private fun fromJson(json: FlatAccount): Account { return Account(json.name, Money(json.currency, json.value)) } @ToJson private fun toJson(account: Account): FlatAccount { return FlatAccount(account.name, account.money.currency, account.money.value) } } 

No olvides agregar el adaptador a tu instancia de Moshi.

 val moshi = Moshi.Builder().add(Account.ADAPTER).add(KotlinJsonAdapterFactory()).build() val adapter = moshi.adapter(Account::class.java) 
  • Moshi: se esperaba una Clase, Tipo Paramétrico o Tipo de Armario Genérico, pero <nulo> es de tipo nulo
  • Adaptador personalizado de Moshi con RxAndroid & Retrofit & Kotlin