我有一个 Kotlin 数据类,它的 arg 可以是对象或数组。有没有一种方法可以将字符串反序列化到此类中,并且不关心是否不是数组,而是以某种方式将其放入一个数组中?
data class Game(var name:List<NameItem>)
data class NameItem(var title: String, var id: Int)
数据可以以单个对象或对象数组的形式返回(我无法控制数据,因为它是第三方数据。
jsonString = "{"game":{"name":{"title":"GameName","id":22}}}"
jsonString = "{"game":{"name":[{"title":"GameName","id":22},{"title":"GameName2","id":23}]}}"
game: Game? = Gson().fromJson(jsonString Game::class.java)
你必须写一个自定义JsonDeserializer
。两者或您的班级应该具有相同的父班级。然后,写一个自定义的JsonDeserializer
对于这个特定类型。
例如:
sealed class GameParent() {
data class Game(val name: String): GameParent()
data class GameList(val games: List<Game>): GameParent()
}
class GameDeserializer : JsonDeserializer<GameParent> {
override fun deserialize(json: JsonElement?, typeOfT: Type?, context: JsonDeserializationContext?): GameParent {
with(json) {
if(isJsonObject) {
// parse as Game
}
if(isJsonArray) {
// parse as GameList
}
}
}
}
然后,在你的GsonBuilder
你必须注册这个自定义JsonDeserializer
:
gsonBuilder.registerTypeAdapter(GameParent::class.java, GameDeserializer());
现在,每当你的Gson
expect GameParent
将使用注册的解串器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)