簡體   English   中英

json4s無法序列化具有mixin特征的案例類

[英]json4s cannot serialize case class with mixin trait

為什么這不起作用?

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對象

{}

而如果我刪除“ with Greet”,則會得到(正確)結果:

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

如果您對格式有更具體的了解,則可以得到想要的結果:

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)

我猜它使用的是Greet類型而不是Winner。 但是我不知道如何解決(也許使用自定義格式除外)。 否則,您可以嘗試Genson ,它可以很好地配合您的示例,並且不需要大量的進口:

import com.owlike.genson.defaultGenson_

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

它還支持json4s類型,因此,例如,如果您想要DOM之類的表示形式並從那里使用json4s,則仍然可以使用JValue子類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM