Polymorphic lift-json deserialization in a composed class

Я пытаюсь автоматически десериализовать объект json в класс scala, используя Lift-Json с классом координат внутри, используемым для хранения информации GeoJson.

case class Request(name:String, geometry:Geometry)

sealed abstract class Geometry

case class Point(coordinates:(Double,Double)) extends Geometry
case class LineString(coordinates:List[Point]) extends Geometry
case class Polygon(coordinates:List[LineString]) extends Geometry

Я хочу десериализовать json-строку следующего вида:

{
name:"test",
geometry:{
   "type": "LineString",
   "coordinates": [ [100.0, 0.0], [101.0, 1.0] ]
  }
}

в класс Request case с правильным классом исполнения LineString в поле Geometry. Я предполагаю, что должен использовать TypeHint, но как? Это правильный подход или мне следует создать три разных Request (RequestPoint, RequestLineString и RequestPolygon)? Вот код Scala для десериализации:

val json = parse(message)
json.extract[Request]
6
задан Robin Green 4 October 2016 в 16:14
поделиться