2017-04-12 65 views
1

我寫了這個代碼來讀取和使用瑟茜使用瑟茜爲普通類(不區分類別)

import io.circe._, io.circe.generic.auto._, io.circe.parser._, io.circe.syntax._ 
case class Foo(i: Int) 
val f = Foo(10) 
val json = f.asJson.toString 
val t1 = decode[Foo](json) 

這個作品非常好寫josn解碼。但是,如果我創建了一個普通類酒吧

class Bar { var i : Int = 0 } 
decode[Bar](json) 

現在,我得到錯誤

could not find implicit value for evidence parameter of type io.circe.Decoder[$sess.cmd25.Bar] 

那麼,這可能與正常類並使用瑟茜他們JSON解碼?

+1

是的,它只是不能自動生成你的解碼器,所以你必須自己寫。 – puhlen

回答

5

隨着io.circe.generic.auto._,你使用瑟茜的自動通用推導,這是無形的LabelledGeneric類型類支持。 LabelledGeneric只適用於元組和類別等產品類型。這就是爲什麼你看到這個錯誤,因爲Circe的自動模式不能自動爲你的普通類派生一個解碼器實例。你可以做的是手動implement解碼器爲您的類(見自定義編碼器/解碼器部分)。