簡體   English   中英

JSON4S不會序列化內部案例類成員

[英]JSON4S does not serialize internal case class members

我有一個從特征繼承的案例類:

trait Thing {
  val name: String
  val created: DateTime = DateTime.now
}

case class Door(override val name: String) extends Thing

這是akka-http,我正在嘗試將JSON返回到get請求:

...
~
    path ("get" / Segment) { id =>
      get {

        onComplete(doorsManager ? ThingsManager.Get(id)) {
          case Success(d: Door) => {
            complete(200, d)
          }
          case Success(_) => {
            complete(404, s"door $id not found")
          }
          case Failure(reason) => complete(500, reason)
        }
      }
    } ~
...

但我只得到name的JSON。 我的確有隱式的Joda序列化程序。 如果我在case類的構造函數中覆蓋了“創建的”時間戳,它的確會序列化,但是它定義了目的,因為我不需要(或不想)用戶提供時間戳。 我嘗試將時間戳移到Door中(作為替代或只是跳過特征),結果是相同的(即沒有“創建”)。

我如何告訴JSON4S也序列化內部成員(和繼承的成員)?

您必須定義一個自定義格式。

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

case class Door(override val name: String) extends Thing
trait Thing {
  val name: String
  val created: DateTime = DateTime.now
}

implicit val formats = DefaultFormats + FieldSerializer[Door with Thing()]

val obj = new Door("dooor")
write(obj) 

暫無
暫無

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

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