2014-10-28 52 views
6

我發現自己在一個情況下,我需要序列化成JSON非案例類。噴霧json正常類(非情況下)列表

具有A類爲:

class MyClass(val name: String) { 
    def SaySomething() : String = { 
    return "Saying something... " 
    } 
} 

我創建了一個JsonProtocol該類:

object MyClassJsonProtocol extends DefaultJsonProtocol { 

    implicit object MyClassJsonFormat extends JsonWriter[MyClass] { 
    override def write(obj: MyClass): JsValue = 
    JsObject(
     "name" -> JsString(obj.name) 
    ) 
    } 
} 

後來在我進口協議的代碼..

val aListOfMyClasses = List[MyClass]() ... // lets assume that has items and not an empty list 
import spray.json._ 
import MyClassJsonProtocol._ 

val json = aListOfMyClasses.toJson 

當試圖構建項目時,出現以下錯誤:

找不到JsonWriter或JsonFormat類型類List [MyClass的]

噴霧JSON對泛型列表已經格式,我提供我的課的形式,會是什麼問題呢?

在此先感謝... !!!

回答

3

當我伸出MyClassJsonFormat從JsonFormat,而不是JsonWriter,緊緊地盯着工作的罰款。看起來,如果你從延長CollectionFormats特質只會工作JsonFormat

下面的代碼編譯爲我好

object MyClassJsonProtocol extends DefaultJsonProtocol { 

    implicit object MyClassJsonFormat extends JsonFormat[MyClass] { 
    override def write(obj: MyClass): JsValue = 
     JsObject(
     "name" -> JsString(obj.name) 
    ) 

     override def read(json: JsValue): MyClass = new MyClass(json.convertTo[String]) 
    } 
    } 
+0

Thks。它的工作原理,但我仍然不知道爲什麼CollectionFormats特性不包括在內。我明確地將它添加到導入,但會編譯ether。 – leonfs 2014-10-30 00:22:55

+0

無需導入CollectionFormats。 DefaultJsonProtocol擴展了所有這些特性 - https://github.com/spray/spray-json/blob/master/src/main/scala/spray/json/DefaultJsonProtocol.scala#L26 – 2014-10-30 02:57:50

+0

我知道,但它沒有解釋爲什麼擴展JsonWriter而不是JsonFormat時它不工作。仍然在擴展DefaultJsonProtocol。 – leonfs 2014-10-30 15:21:08

0

原因似乎被提及here

An issue you might run into with just JsonReader/JsonWriter is that when you try to lookup JsonReader/JsonWriter for Option or a collection, it looks for a JsonFormat for the contained type, which will fail. Not sure if there is something I am missing that will fix that issue.

你和我遇到過這個問題。我現在看不到@ user007建議使用完整的JsonFormat。這本身至少給我帶來了更多的困難 - 我打算爲我的班級使用默認閱讀器。

哦,好吧......

+0

我建議你使用json4s。它會讓你的生活更輕鬆。至少這就是我最終做的。根本沒有遺憾。 – leonfs 2015-07-07 06:23:58

+0

感謝您的建議,但我對spray-json感到滿意,否則。 – akauppi 2015-07-07 06:51:11