2015-12-21 54 views
1

我想從我的播放服務器調用webservice我正在使用upickle進行序列化/反序列化。我的問題我有一個密封的特性爲Upickle密封特徵的序列化/反序列化

sealed trait RequestContent { 
} 
case class CreateUserRequest (email: String, password: String,jsonBlob: Map[String, String], createBTCWallet: Boolean) extends RequestContent 

,當我嘗試使用upickle.default.write作爲

val userRequest = CreateUserRequest("email","pw",Map("name" -> "name", true)) 
write(userRequest) 

它給出了$type一個額外的關鍵。有沒有辦法讓數據發佈而不需要輸入upickle?

回答

2

對於密封的特徵層次結構,uPickle需要額外的$type字段才能夠反序列化,因爲它需要知道實例化哪個子類。

所以這個額外的鍵的存在是完全正常和必要的。不可能將其刪除,因爲這會阻止反序列化工作。

+0

如果我得到這個權利,那麼在那種情況下,我沒有辦法使用upickle發佈數據到遠程web服務。 –

+0

不使用密封特徵的默認picklers/unpicklers。 uPickle不是爲這個用例設計的,而是針對uPickle也用於反序列化的用例。然而,你可以爲你的密封特性編寫一個[自定義pickler](http://lihaoyi.github.io/upickle-pprint/upickle/#CustomPicklers),這將完全符合你的要求。 – sjrd