import scala.reflect.BeanProperty case class DenormalizedRating (@BeanProperty var actLevStart: Int, @BeanProperty var actLevEnd: Int) { def this () = this (0, 0) // Default constructor for flexjson. def activityRating = actLevEnd - actLevStart } def cl = new flexjson.ClassLocator { val classLoader = Thread.currentThread.getContextClassLoader override def locate (map: java.util.Map[_,_], path: flexjson.Path): Class[_] = { if (map.containsKey ("actLevStart")) classOf[DenormalizedRating] else { val clazz = map.get ("class") // Flexjson class signature. if (clazz.isInstanceOf[String]) classLoader.loadClass (clazz.toString) else classOf[java.util.HashMap[_, _]] } } } (new flexjson.JSONDeserializer () .use (null, cl) .deserialize (""" {"foo1": "bar1", "foo2": {"actLevStart": 1, "actLevEnd": 2}, "foo3": {"someMapKey": "someMapValue"}} """)).toString