2013-03-01 2 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

을 할 수 있습니다를, I 그걸하는 법을 모르겠다. ... –

+0

@JulienLafont - 누가 반사없이 아무것도 말했지? 하지만 코드를 직접 작성하지 않고 한 줄짜리 코드를 사용하고 싶습니다. – ripper234

+0

반성과 함께, 나는 아무도 이미 그것을했다고 생각하지 않습니다. 예를 들어, Anon.getClass.getDeclaredFields를 사용하여 맵 이름/값을 작성하십시오. –

답변

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) 
} 
관련 문제