2017-08-17 177 views
1

我有枚舉JSON轉換的很多隱性val的在我的程序像:斯卡拉通用隱VAL

implicit val format = new Format[AuthRoleIndividual] { 
    def reads(json: JsValue) = JsSuccess(AuthRoleIndividual.withName(json.as[String])) 
    def writes(myEnum: AuthRoleIndividual) = JsString(myEnum.toString) 
    } 

注:AuthRoleIndividual延伸Enumeration。我的方法是寫這樣的東西:

implicit val format[T <: Enumeration] = new Format[T] { 
    def reads(json: JsValue) = JsSuccess(T.withName(json.as[String])) 
    def writes(myEnum: T) = JsString(myEnum.toString) 
    } 

但這是不可能的。有任何想法嗎?

+1

順便說一句,Play JSON已經提供['Writes'](https://www.playframework.com/documentation/2.6.0/api/scala/index.html#play.api.libs.json.Writes$ @enumNameWrites [E%3C:Enumeration]:play.api.libs.json.Writes [E#Value])和['Reads'](https://www.playframework.com/documentation/2.6.0/api/ scala/index.html#[email protected] [E%3C:Enumeration](enum:E):play.api.libs.json.Reads [E#Value])枚舉 – cchantep

回答

1

首先,你是誤會了Enumeration值的類型,對於Enumeration值,該值的類型是Value類型不Enumeration,所以你應該綁定implicitValue類型。例如:

object State extends Enumeration { 
    val A = Value("A") 
    val B = Value("B") 
    } 

    implicit def foo(v: State.Value): String = v.toString + "-Bar" 

    val t: String = State.A 

其次,作爲上述代碼,由於Value類型被綁定到objectState.value),則不能創建通用implicits所有Enumeration

+0

謝謝非常清楚! – perotom