Kotlin GSON пользовательская десериализация - PullRequest
0 голосов
/ 20 марта 2020

У меня есть JSON Я пытаюсь десериализовать. Я пытаюсь приспособить следующую структуру со следующими ограничениями

1) И прямоугольник, и квадрат имеют тип Shape и вместо этого могут иметь список фигур.

2) Их порядок можно переключать квадрат может иметь список прямоугольников (список фигур)

3) Как квадрат, так и прямоугольник могут также иметь список кругов, который ничего не наследует от формы и в основном состоит из формы

4) Я хочу однозначно идентифицировать квадрат и класс прямоугольника, а не рассматривать их как один и тот же объект Shape после десериализации в структуре моей модели (интересно, есть ли способ без анализа свойства type, поэтому я знаю, что тип объекта - Square или Rectangle).

{
 "type": "rectangle",
 "x": "3",
 "y": "3",
"children": [
{
  "type": "square",
  "x": "3",
  "y": "4",
  "children": [
    {
      "type": "circle",
      "radius": "3"
    },
    {
      "type": "circle",
      "radius": "4"
    },
    {
      "type": "circle",
      "radius": "5"
    }
  ]
}
]
}

Объекты модели, которые я создал до сих пор

abstract class Shape {
abstract val x: String
abstract val y: String
abstract val type: String
abstract val children: List<Shape>
}

data class Square(override val x: String, override val y: String, override val type: String, 
  override val children: List<Shape>) : Shape()

data class Rectangle(override val x: String, override val y: String, override val type: 
   String, override val children: List<Shape>) : Shape()

data class Circle(val radius: String, val type: String)
...