sealed trait FormField
case class StringField(name: String, value: String) extends FormField
case class ChoiceField[T : Writes](name: String, value: T, choices: List[T]) extends FormField
然后,别的地方我需要这样做:Scala的模式匹配类型为Class的类型参数
def makeJson(fields: List[FormField]) = fields.map {
case StringField(name, value) => Json.obj(name -> value)
case ChoiceField(name, value, _) => Json.obj(name -> value)
}
在最后一种功能,scalac/SBT不“理解”是value
是可转换为json(通过其隐式/类型类Writes[T]
)。我怎么写它,以便它“得到它”?
(注:Writes[T]
是玩框架 - 它基本上说,没有缴费的类型T => JsValue
隐式转换)
:
而且你的模式匹配“未找到任何类型的JSON序列尝试实施这种类型的隐写或格式。” – kornfridge
你不能创建一个'Writer [FormField]'实例,它可以将'StringField'或'ChoiceField'变成json吗? –
如果我试图创建'Writes [FormField]',我仍然需要模式匹配,并且我会有完全相同的问题。 (编辑:'makeJson'在这里_is_基本上''写[FormField]') – kornfridge