我有一個遞歸數據結構,我想要編寫一個自定義噴霧json序列化程序。噴霧json中的遞歸數據類型和自定義序列化器
case class Counts(var count: Int, var properties: mutable.Map[String, Counts])
object MyJsonProtocol extends DefaultJsonProtocol {
import DefaultJsonProtocol._
implicit object CountsJsonFormat extends RootJsonFormat[Counts] {
def read(json: JsValue) = ???
def write(c: Counts) = {
// Flatten count and properties into the same object.
val properties = c.properties.toJson.asJsObject
val fields = properties.fields + ("count" -> JsNumber(c.count))
JsObject(fields.toSeq: _*)
}
}
}
我已經看到了,如果你可以使用內建的序列化邏輯如何做到這一點的情況下類的文檔,但我不知道如何應用到自定義序列。我得到這個編譯器錯誤:
Cannot find JsonWriter or JsonFormat type class for scala.collection.mutable.Map[String,co.asku.acuity.EventCounter.Counts]
val properties = c.properties.toJson.asJsObject
^
感謝;我出於各種原因使用可變映射,並沒有意識到spray-json默認不支持它們。有沒有理由不這樣做? – tmandry
不,對不起。但是,如果你想了解哪些集合被支持,哪些不是你可以看看[CollectionFormats](https://github.com/spray/spray-json/blob/master/src/main/scala /spray/json/CollectionFormats.scala)。 – edi