2013-03-01 124 views
1

我有以下代碼:如何將匿名類轉換爲json?

def test = Action { 
    val Anon = new { 
    val foo = "foo" 
    val bar = "bar" 
    } 

    Ok(Json.toJson(Anon)) 
} 

而且我得到這個編譯錯誤:

No Json deserializer found for type Object{val foo: String; val bar: String}. Try to implement an implicit Writes or Format for this type.

什麼是快速解決這個問題?我已經在這裏發現了與這個錯誤有關的另一個問題,但也許它更具體/更復雜。

+0

沒有反映,我不知道該怎麼做... – 2013-03-01 14:17:30

+0

@JulienLafont - 誰沒有反射說什麼?但我不想自己編寫代碼,而是使用一行代碼。 – ripper234 2013-03-01 16:06:37

+0

經過反思,我不認爲有人已經這樣做。嘗試使用Anon.getClass.getDeclaredFields創建一個映射名稱/值。 – 2013-03-01 19:50:52

回答

1

至於我可以告訴的唯一途徑是引入一個結構類型:

type AnonType = { 
    def foo:String 
    def bar:String 
    } 

然後你就可以做

implicit val writeAnon1 = 
    ((__ \ "foo").write[String] and 
    (__ \ "bar").write[String]) 
    {anon:AnonType => (anon.foo, anon.bar)} 

implicit val writeAnon2 = new Writes[AnonType] { 
    def writes(o:AnonType) = 
    Json toJson Map(
     "foo" -> o.foo, 
     "bar" -> o.bar) 
} 
相關問題