在Android应用程序中,我需要为具有单个抽象级别的Kotlin数据类反序列化Json数据。但我没有任何想法,在构造函数中放置正确的属性。如何使用Gson反序列化继承的Kotlin数据类
举一个简单的版本,比方说我有一个形状:
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或松动数据类优势?
谢谢
谢谢。这是我正在寻找的解决方案。 – elcolto