我知道如何使用简单的
序列化Scala中的case类implicit val caseClassFormat = Json.format[CaseClass]
但是,我似乎无法找到如何序列化常规类。这是如何运作的?我知道我必须扩展Serializable。但是,当我尝试运行Json.toJson(class)
时,我的编译器会抛出一个错误,说我需要编写一个隐式读/写。
任何和所有帮助将不胜感激。感谢。
答案 0 :(得分:2)
Json.format[X]
调用会在游戏中运行一个宏,为您创建Format[X]
代码。
如果查看宏的实现,则需要在提供的类的伴随对象中存在unapply
和apply
函数。对于案例类,这两件事都是正确的。
如果您希望能够使用格式化程序的简写,那么您可以执行以下操作:
import play.api.libs.json.Json
class Foo(val s: String)
object Foo{
def apply(s: String) = new Foo(s)
def unapply(f: Foo) = Some(f.s)
}
val format = Json.format[Foo]
这将允许您相应地序列化,反序列化JSON。
val asString = Json.toJson(Foo("hello"))(format).toString
val js = Json.parse(asString).as[Foo](format)