2012-02-21 33 views
1

我想對使用lift-json序列化的Scala案例類進行反序列化。我遇到的問題是,我不知道如何調用下面的泛型方法extractOpt[A]方法:使用lift-json實例化基於json和元數據的類型

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

類型的[A]是要依靠元數據,例如類名的[A]但對於我的生活我無法解決如何使用反射來打電話。在C#中,我可以使用反射設置extractOpt[A]上的調用的通用類型。我擔心我的問題與Java類型擦除有關。

我將會有很多案例類,所以我確實想避免必須從{metadata} - > classOf []創建一些手工製作的地圖。我完全可以控制與someString相關的元數據是什麼。

如果它有助於理解爲什麼有這個問題,我在執行活動的採購,以及所有我的[A]類型將是持續的事件。任何想法我可以做什麼?

回答

5
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] 

而對於加分,爲什麼按在計算器上引線的「問問題」按鈕,你瞬間能夠想到一個解決你自己的問題嗎? ;)