【问题标题】:Reads/Writes/Formats for Non Case Class in ScalaScala 中非案例类的读/写/格式
【发布时间】:2016-07-13 15:34:31
【问题描述】:
我知道如何用简单的方法在 Scala 中序列化一个案例类
implicit val caseClassFormat = Json.format[CaseClass]
但是,我似乎找不到如何序列化常规课程。这是如何运作的?我知道我必须扩展 Serializable。但是,当我尝试运行 Json.toJson(class) 时,我的编译器会抛出一个错误,提示我需要编写一个隐式读/写。
我们将不胜感激。谢谢。
【问题讨论】:
标签:
json
scala
serialization
【解决方案1】:
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)