在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