【问题标题】: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] 代码。

    如果您查看宏的实现,它要求在提供的类的伴随对象中存在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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-25
      相关资源
      最近更新 更多