我正在尝试为需要这样构造的对象创建数据类:
data class Foo<T>() {
val type: String
val body: T
}
主体的类型将取决于type
的值,并将是一组易于管理的预定义数据类别(ThisBody
,ThatBody
等之一)。 / p>
我正在编写一个Gson TypeAdapter来读取服务器json。
当reader.nextName() == "body"
时,可以抓取整个对象并进行如下处理:
Gson().fromJson<ThisBody>(bodyObject, ThisBody::class.java)
还是我只需要把它吸干并全部写出来?
很显然,阅读器上没有nextObject()
方法,但是我想知道是否有某种偷偷摸摸的方法来获取对象并像上面那样做。
到目前为止,我的攻击计划如下:
@Throws(IOException::class)
override fun read(reader: JsonReader?): Foo? {
reader?.let {
...
var foo = Foo()
while (it.hasNext()) {
when (it.peek()) {
JsonToken.BEGIN_OBJECT -> it.beginObject()
JsonToken.NAME -> {
when (it.nextName()) {
TYPE -> {
foo.type = it.nextString()
}
BODY -> {
//Any way to do this?
Gson().fromJson<ThisBody>(it.nextObject, ThisBody::class.java)
}
else -> it.skipValue()
}
}
JsonToken.END_OBJECT -> it.endObject()
}
}
return foo
}