Question

Je voudrais désérialiser les classes de cas Scala qui ont été sérialisées à l'aide de lift-json. Le problème que j'ai est, je ne sais pas comment invoquer la méthode générique extractOpt[A] méthode ci-dessous:

someString:String = {...}
JsonParser.parse(someString).extractOpt[A]

Le type de [A] va dépendre des métadonnées, par exemple le nom de classe de [A] mais pour la vie de moi je ne peux pas trouver comment faire l'appel en utilisant la réflexion. En c #, je serais juste capable de définir le type générique pour un appel sur extractOpt[A] en utilisant la réflexion. J'ai peur que mes problèmes soient liés à l'effacement de type Java.

Je vais avoir beaucoup de classes de cas, donc je veux vraiment éviter d'avoir à créer une sorte de carte faite à la main à partir de {metadata} -> classOf []. J'ai un contrôle total sur les métadonnées associées à someString.

Si cela permet de comprendre pourquoi je rencontre ce problème, j'implémente le sourçage d'événements et tous mes types [A] seront des événements persistants. Des idées sur ce que je peux faire?

Était-ce utile?

La solution

val json:JValue = JsonParser.parse(someString)
//typeName = classCanonicalName, ie this is the metadata
val eventType = Class.forName(typeName) 
val deserialised:Event = Extraction.extract(json, TypeInfo(eventType,None)).asInstanceOf[Event]

Et pour les points bonus, pourquoi le fait d'appuyer sur le bouton «poser une question» sur StackOverflow vous permet-il de trouver instantanément une solution à votre propre problème?;)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top