int*_*_32 5 java json gson kotlin
我要反序列化0到false和1到true。
我创建了这个类:
class IntBooleanDeserializer : JsonDeserializer<Boolean?> {
override fun deserialize(json: JsonElement?, typeOfT: Type?, context: JsonDeserializationContext?): Boolean? {
json?.let {
return json.asInt == 1
}
return null
}
}
Run Code Online (Sandbox Code Playgroud)
并注册它:
private val gson = GsonBuilder()
.registerTypeAdapter(Boolean::class.java, IntBooleanDeserializer())
.create()
Run Code Online (Sandbox Code Playgroud)
并为此创建了测试类:
data class BooleanClass(val value: Boolean?)
Run Code Online (Sandbox Code Playgroud)
进而:
gson.fromJson("{\"value\": 0}", BooleanClass::class.java)
Run Code Online (Sandbox Code Playgroud)
此代码引发异常:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a boolean but was NUMBER at line 1 column 12 path $.value
Run Code Online (Sandbox Code Playgroud)
似乎 Gson 没有将我的反序列化器用于Boolean?,但成功地将其他自定义反序列化器用于其他类型(例如,用于枚举)。
为什么?
你注册的解串器Boolean::class.java是boolean当你实际需要的类型被Boolean?翻译成java.lang.Boolean。
要得到java.lang.Boolean你必须使用Boolean::class.javaObjectType注册。
您还会发现所有原始Java类型都具有相同的行为。
| 归档时间: |
|
| 查看次数: |
970 次 |
| 最近记录: |