假设我有许多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)
...但是对于每个班级来说,这似乎都是重复的。
有更好的方法吗?