2
我不知道這一點,說我有一個在它選擇的情況下類,如:在一個案例類json4s序列化諾內斯
case class Note(id: Int, noteA: Option[String], noteB: Option[String])
如果我試圖序列化使用json4s以JSON作爲被禁通過Scalaltra指南,我的case類中的任何Nones都會從輸出中移除。使得下面的代碼
protected implicit val jsonFormats: Formats = DefaultFormats
before() {
contentType = formats("json")
}
get("/MapWNone") {
new Note(1, None, None)
}
會產生 「{」 ID 「:1}」 的輸出,我想有一個輸出,如:{ 「ID」:1, 「注意事項】」:空, 「noteB」:空}
我寫了一個CustomSerializer線沿線的:
class NoteSerializer extends CustomSerializer[Note](format => ({
| case jv: JValue =>
| val id = (jv \ "id").extract[Int]
| val noteA = (jv \ "noteA").extract[Option[String]]
| val noteB = (jv \ "noteB").extract[Option[String]]
| Note(id, noteA, noteB)
| }, { case n: Note => ("id" -> n.id) ~ ("noteA" -> n.noteA) ~ ("noteB" -> n.noteB) }))
哪個做同樣的事情作爲默認格式。
我認爲,改變的最後一行到這樣的工作
case n: Note => ("id" -> n.id) ~ ("noteA" -> n.noteA.getOrElse(JNull)) ~ ("noteB" -> n.noteB.getOrElse(JNull))
但不編譯。
No implicit view available from java.io.Serializable => org.json4s.JsonAST.JValue
我不知道我怎麼會在和注意事項】田noteB一個有些/沒有做匹配,並且在任成員的無的情況下返回JNull。
感謝