多个类的自定义Moshi JSON适配器类

时间:2020-06-23 08:46:58

标签: kotlin moshi

假设我有许多Request类。这是两个示例:

data class PingRequest(
    val id: Int
)

data class ReloadRequest()

我想序列化为JSON(并反序列化):

{
  "request": "ping",
  "id": 42
}

{
  "request": "reload"
}

一种方法是为每个类创建一个自定义适配器:

data class PingRequestJson(
    val request: String,
    val id: Int
)

class PingRequestJsonAdapter {
    @FromJson
    fun fromJson(pingRequestJson: PingRequestJson) =
        PingRequest(pingRequestJson.id)

    @ToJson
    fun toJson(pingRequest: PingRequest) =
        PingRequestJson("ping", pingRequest.id)
}

并注册:

val moshi = Moshi.Builder()
    .add(PingRequestJsonAdapter())
    .add(KotlinJsonAdapterFactory())
    .build()

val request = PingRequest(42)
val jsonAdapter = moshi.adapter(PingRequest::class.java)
val actual = jsonAdapter.toJson(request)
val expected = """{"request":"ping","id":0}"""

assertEquals(expected, actual)

...但是对于每个班级来说,这似乎都是重复的。

有更好的方法吗?

0 个答案:

没有答案