使用多输入字段Moshi

我有一些像这样的JSON:

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

我正在使用Moshi把这个数据结构分解成如下的数据结构:

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

一切运作良好。 但是,我真的想提取currencyvalue参数到一个单独的Money对象。 所以我的模型看起来更像:

 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 ) 

我正在努力的挑战是如何注释事物,以便Money对象可以被给予两个不同的领域( currencyvalue )来自同一级别的父帐户。

我是否需要创建一个称为“ MoshiAccount ”的中间“解组”对象,然后使用自定义适配器将其转换为真实的Account对象?

我看到了如何使用Moshi将int数组去除一个自定义的类? 看起来很接近(除了在这种情况下,适应对象(VideoSize)只需要一个字段作为输入…在我的情况下,我需要currencyvalue

任何想法或建议将不胜感激。 谢谢

Moshi的适配器可以为您创建JSON结构。

 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) } } 

不要忘记将适配器添加到您的Moshi实例。

 val moshi = Moshi.Builder().add(Account.ADAPTER).add(KotlinJsonAdapterFactory()).build() val adapter = moshi.adapter(Account::class.java)