将 Moshi 与多个输入字段一起使用
Using Moshi with multiple input fields
我有一些 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
)
一切正常。但是,我真的很想将 currency
和 value
参数提取到一个单独的 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
对象指定来自同一对象的两个不同字段(currency
和 value
)级别为父帐户。
我是否需要创建一个称为 MoshiAccount
的中间 "unmarshalling" 对象,然后使用自定义适配器将其转换为我的真实 Account
对象?
我看到 看起来很接近(除了在那种情况下,改编对象 (VideoSize) 只需要一个字段作为输入...在我的例子中,我需要两个 currency
和 value
)
如有任何想法或建议,我们将不胜感激。谢谢
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)
我有一些 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
)
一切正常。但是,我真的很想将 currency
和 value
参数提取到一个单独的 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
对象指定来自同一对象的两个不同字段(currency
和 value
)级别为父帐户。
我是否需要创建一个称为 MoshiAccount
的中间 "unmarshalling" 对象,然后使用自定义适配器将其转换为我的真实 Account
对象?
我看到 currency
和 value
)
如有任何想法或建议,我们将不胜感激。谢谢
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)