I would like to deserialise Scala case classes that have been serialised using lift-json. The problem I am having is, I don't know how to invoke the generic method extractOpt[A]
method below:
someString:String = {...}
JsonParser.parse(someString).extractOpt[A]
The type of [A]
is going to depend on metadata, for example the class name of [A]
but for the life of me I can't work out how to make the call using reflection. In c# I would just be able to set the generic type for a call on extractOpt[A]
using reflection. I fear my problems are something to do with Java type erasure.
I am going to have a lot of case classes so I really want to avoid having to create some kind of hand crafted map from {metadata} -> classOf[]. I have full control over what the metadata associated with someString
is.
If it helps understand why I have this issue, I am implementing event sourcing, and all my [A] types are going to be persisted events. Any ideas what I can do?
val json:JValue = JsonParser.parse(someString)
ReplyDelete//typeName = classCanonicalName, ie this is the metadata
val eventType = Class.forName(typeName)
val deserialised:Event = Extraction.extract(json, TypeInfo(eventType,None)).asInstanceOf[Event]
And for bonus points, why does pressing the 'ask question' button on StackOverflow lead to you instantly being able to think of a solution to your own problem? ;)