kotlin Gson 默认拔int 转为double 如何调整
时间: 2023-12-25 07:05:58 浏览: 205
在 Kotlin 中,Gson 默认将 int 类型转换为 double 类型是因为 JSON 格式中没有 int 类型,只有数字类型。因此 Gson 在解析 JSON 数据时,将所有数字类型都解析为 double 类型。如果你想要将 int 类型保留为 int 类型,可以使用 GsonBuilder 在创建 Gson 对象时设置一个自定义的 TypeAdapter。
以下是一个示例,展示如何将 int 类型保留为 int 类型:
```kotlin
val gson = GsonBuilder()
.registerTypeAdapter(Int::class.java, object : TypeAdapter<Int>() {
@Throws(IOException::class)
override fun write(out: JsonWriter, value: Int?) {
if (value == null) {
out.nullValue()
return
}
out.value(value)
}
@Throws(IOException::class)
override fun read(`in`: JsonReader): Int {
if (`in`.peek() == JsonToken.NULL) {
`in`.nextNull()
return 0
}
return try {
`in`.nextInt()
} catch (e: NumberFormatException) {
0
}
}
})
.create()
```
在这个示例中,我们创建了一个 GsonBuilder 对象,并注册了一个自定义的 TypeAdapter。这个 TypeAdapter 用于将 int 类型保留为 int 类型。在 write() 方法中,我们将 int 值写入 JsonWriter。在 read() 方法中,我们从 JsonReader 中读取 int 值。如果值为 null,则写入 null 值。如果读取的值不是 int 类型,则返回默认值 0。
此后,你可以使用这个 Gson 对象将 JSON 数据转换为对象,其中 int 类型将保留为 int 类型。例如:
```kotlin
val jsonString = "{\"value\": 42}"
val data = gson.fromJson(jsonString, Data::class.java)
println(data.value)
```
这里我们假设你有一个名为 Data 的数据类,它有一个 int 类型的属性 value。在这个示例中,我们将一个包含 int 类型值的 JSON 字符串反序列化为 Data 对象,并输出 value 属性的值。
阅读全文