Scala中非案例类的读/写/格式

时间:2016-07-13 15:34:31

标签: json scala serialization

我知道如何使用简单的

序列化Scala中的case类
implicit val caseClassFormat = Json.format[CaseClass]

但是,我似乎无法找到如何序列化常规类。这是如何运作的?我知道我必须扩展Serializable。但是,当我尝试运行Json.toJson(class)时,我的编译器会抛出一个错误,说我需要编写一个隐式读/写。

任何和所有帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:2)

Json.format[X]调用会在游戏中运行一个宏,为您创建Format[X]代码。

如果查看宏的实现,则需要在提供的类的伴随对象中存在unapplyapply函数。对于案例类,这两件事都是正确的。

如果您希望能够使用格式化程序的简写,那么您可以执行以下操作:

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)