2012-08-09 34 views
1

我試圖在使用Lift的json庫序列化它們時,在我的對象中使用html轉義所有字符串。我以爲我可以通過向對象的FieldSerializer傳遞一個escape(部分)函數來做到這一點,但這似乎添加字段到json對象 - 而不是替換他們。你可以看到我運行下面的簡單例子的意思,並注意其輸出 {"y":"test","x":"test"}而我想{"y":"test"}我可以使用Lift的FieldSerializer更改序列化中的字段嗎?

import net.liftweb.json.Serialization 
import net.liftweb.json.FieldSerializer 
import net.liftweb.json.FieldSerializer._ 
import net.liftweb.json.DefaultFormats 
case class Simple(x: String) 
implicit val formats = DefaultFormats + 
    FieldSerializer[Simple](renameTo("x","y"),renameFrom("y", "x")) 
Serialization.write(Simple("test")) 

有沒有一種方法,我可以告訴FieldSerializer以取代我的部分功能相匹配的領域?

+0

您可能要問電梯郵件列表上的https:/ /groups.google.com/forum/m/?fromgroups#!forum/liftweb – fmpwizard 2012-08-11 13:56:05

回答

0

嘗試CoustomeSerializer:

implicit val formats = DefaultFormats + 
    new CustomSerializer[Simple](ser => ({ 
     case JObject(JField("y", JString(x)) :: Nil) => Simple(x) 
    }, { 
     case simple: Simple => JObject(JField("y", JString(simple.x)) :: Nil) 
    })) 

ps.I問這個電梯上的谷歌組,並在得到這個答案,結賬https://groups.google.com/d/msg/liftweb/ShRrGNrsu6Y/sNw4JGdSU6sJ

+0

感謝您在郵件列表上提問 - 我從來沒有跟進過,因爲我發現了一個解決方案,適用於我的特定情況:)似乎無法用FieldSerializer替換字段。我真的很想避免編寫一個CustomSerializer,因爲在實際代碼中,有很多其他字段需要以標準方式序列化。 – Wonko 2012-09-24 06:37:55

相關問題