2010-02-08 4 views
1

JSON 문자열을 비 직렬화하려는 경우 lift-json에서 예외가 있습니다. (v2M1 사용).Lift-JSON을 통해 json 객체 직렬화 및 비 직렬화

는 기본적으로 나는 다음과 같은 클래스가 :

@BeanInfo 
case class Game(val id:Int, 
val bad:Map[String,Plan], 
val good:Map[String,Plan]) 

을하고 나는 게임 케이스 클래스로 jsonInString를 역 직렬화하는

net.liftweb.json.Serialization.read[Game](jsonInString) 

을 사용하고 있습니다. 불행하게도 나는 다음과 같은 오류가 점점 오전 : 나는 당신의 의견, 감사 감사

net.liftweb.json.MappingException: Can't find primary constructor for class interface scala.collection.immutable.Map 
at net.liftweb.json.Meta$.fail(Meta.scala:93) 
at net.liftweb.json.Meta$Reflection$$anonfun$primaryConstructorOf$1.apply(Meta.scala:129) 
at net.liftweb.json.Meta$Reflection$$anonfun$primaryConstructorOf$1.apply(Meta.scala:129) 
at scala.Option.getOrElse(Option.scala:61) 
at net.liftweb.json.Meta$Reflection$.primaryConstructorOf(Meta.scala:129) 
at net.liftweb.json.Extraction$.newInstance$1(Extraction.scala:106) 
at net.liftweb.json.Extraction$.build$1(Extraction.scala:119) 
at net.liftweb.json.Extraction$$anonfun$2$$anonfun$apply$1.apply(Extraction.scala:119) 
at net.liftweb.json.Extraction$$anonfun$2$$anonfun$apply$1.apply(Extraction.scala:119) 
at scala.List.flatMap(List.scala:1132) 
at net.liftweb.json.Extraction$$anonfun$2.apply(Extraction.scala:119) 
at net.liftweb.json.Extraction$$anonfun$2.apply(Extraction.scala:119) 
at net.liftweb.json.Extraction$.newInstance$1(Extraction.scala:106) 
at net.liftweb.json.Extraction$.build$1(Extraction.scala:119) 
at net.liftweb.json.Extraction$.extract0(Extraction.scala:154) 
at net.liftweb.json.Extraction$.extract(Extraction.scala:37) 
at net.liftweb.json.JsonAST$JValue.extract(JsonAST.scala:247) 
at net.liftweb.json.Serialization$.read(Serialization.scala:50) 

, -A

PS를 - 나는 (Scala-tools.org에서 2010년 2월 10일 @ 스냅 샷) v2M2 시도 예외가 사라졌지만 직렬화가 올바르지 않습니다! 아래의 설명을 참조하십시오.

답변

2

스칼라를 직렬화하도록 지원합니다. 며칠 전부터 추가되었습니다. 그것은 1-2 일 안에 풀어 놓일 Lift-2.0-M2 안에있을 것이다. 이 기능이 필요한 경우 지금 스냅 샷을 야간에 시도 할 수 있습니다.

@BeanInfo와 명시 적 값은 사례 클래스에서 필요하지 않습니다. 당신은 정의 할 수 있습니다 :

case class Game(id: Int, bad: Map[String, Plan], good:Map[String,Plan]) 
+0

을 사실이 (지금 스칼라-도구에서 리프트-JSON의 스냅 샷 버전 사용) 다음 사용의 경우 작동하지 않습니다 경우 클래스 계획 (계획 : 옵션 [액션]) 사례 클래스 게임 (게임 :지도 [String, Plan]) 사례 클래스 액션 (ID : Int, subAction : 옵션 [조치]) val game = 새 게임 (지도 ("a"-> 새 계획 일부 (새로운 액션 (1, 없음))))) 암시 발 포맷 =의 net.liftweb.json.DefaultFormats이 게임 beEqualTo이 ( Serialization.read [게임] (Serialization.write은 (게임))) –

+0

내가 추가해야 이 버그 티켓. 다음 링크는 해결 방법을 보여줍니다. http://www.assembla.com/spaces/liftweb/tickets/341-Type-hints-are-needed-in-JSON-serializization-for-non-polymorphic-Map- – Joni

관련 문제