在我的项目中,我希望使用gson反序列化具有androidx.compose.ui.graph ics.Color的JSON.我的简化数据类如下所示:
data class Colors(val color: Color)
我想为 colored颜色 类型添加自定义适配器:
fun main() {
val colors = GsonBuilder()
.registerTypeAdapter(Color::class.java, ColorAdapter())
.create()
.fromJson("{color: \"#FFFFFF\"}", Colors::class.java)
println(colors)
}
class ColorAdapter : TypeAdapter<Color>() {
override fun write(out: JsonWriter?, value: Color?) {
TODO("Not yet implemented")
}
override fun read(reader: JsonReader): Color {
val color = reader.nextString()
return Color(color.removePrefix("#").toLong(radix = 16))
}
}
它的读取从未被调用,应用程序因为格式而崩溃,所以我try 了其他方法.要像这样添加适配器
.registerTypeHierarchyAdapter(Long::class.java, ColorAdapter())
在这种情况下,调用了Read,但出现了错误:线程"main"中出现异常com.google.gson.JsonSynaxException:应为Long,但实际为androidx.Compose.ui.graph ics.Color
原因可能是 colored颜色 的内部定义:
@Immutable
@kotlin.jvm.JvmInline
value class Color(val value: ULong)
但无论如何,我没有找到任何解决方案.
问题是,我如何才能在不将字段和适配器更改为使用Long的情况下实现这一点,因为这是我目前唯一的 Select .