2014-10-03 63 views
2

爲什麼這不起作用?json4s無法用mixin特徵序列化案例類

object JsonExample extends App { 
    import org.json4s._ 
    import org.json4s.native.Serialization 
    import org.json4s.native.Serialization.{read, write} 
    implicit val formats = Serialization.formats(NoTypeHints) 

    case class Winner(id: Long, numbers: List[Int])  

    trait Greet { val greeting = "hi"} 
    val obj = new Winner(1, List(1,2)) with Greet 
    println(write(obj)) 
} 

這將打印一個空的JSON對象

{} 

而如果我刪除了 「以迎接」 我獲得(正確)結果:

{"id":1,"numbers":[1,2]} 

回答

4

看起來,如果你是更具體的與格式,你可以得到重新的結果你「之後:

import org.json4s.{FieldSerializer, DefaultFormats} 
import org.json4s.native.Serialization.write 

case class Winner(id: Long, numbers: List[Int]) 
trait Greet { val greeting = "hi"} 

implicit val formats = DefaultFormats + FieldSerializer[Winner with Greet]() 

val obj = new Winner(1, List(1,2)) with Greet 

//returns {"greeting":"hi","id":1,"numbers":[1,2]} 
write(obj) 
1

我想它使用問候鍵入而不是贏家。但是我不知道你能如何解決它(除了可能是自定義格式)。否則,你可以嘗試Genson,它很好地與你的榜樣,並且不需要萬噸進口:

import com.owlike.genson.defaultGenson_ 

// produces {"id":1,"numbers":[1,2]} 
val jsonString = toJson(winnerObject) 

它還支持json4s類型,所以如果你想有一個DOM可以例如仍然DESER任何JValue子像表示和從那裏使用json4s。