在 Android 应用程序中,我需要为 Kotlin 数据类反序列化 Json 数据,具有单一抽象级别。但我不知道在构造函数中放置正确的属性。
作为一个简单的版本,假设我有一个形状:
abstract class Shape(open val x: Int, open val y: Int)
有两个推导
data class Circle(val radius: Int, override val x: Int, override val y: Int): Shape(x, y)
和
data class Square(val width: Int, override val x: Int, override val y: Int): Shape(x, y)
所以我的目标是,不实例化一个形状。所以,总是反序列化它的派生。稍后我需要处理其他类中的一些集合属性,例如:
val shapes: List<Shape>
但我还必须知道每个元素的派生类型。
当我尝试使用 Gson 反序列化给定示例时
val square = gson.fromJson(SQUARE_JSON, Square::class.java)
我总是得到一个 IllegalArgumentException
java.lang.IllegalArgumentException: class com.example.shapes.model.Square declares multiple JSON fields named x
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:170)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100)
at com.google.gson.Gson.getAdapter(Gson.java:423)
at com.google.gson.Gson.fromJson(Gson.java:886)
at com.google.gson.Gson.fromJson(Gson.java:852)
at com.google.gson.Gson.fromJson(Gson.java:801)
at com.google.gson.Gson.fromJson(Gson.java:773)
是否有可能在不编写自定义 Gson TypeAdapter 或失去数据类优势的情况下正确反序列化此类?
谢谢