斯卡拉酸洗:怎么样?

Vad*_*kan 9 serialization scala scala-pickling

我正在尝试使用"pickling"序列化是Scala,我看到同样的例子演示它:

import scala.pickling._
import json._

val pckl = List(1, 2, 3, 4).pickle
Run Code Online (Sandbox Code Playgroud)

Unpickling就像酸洗一样简单:

val lst = pckl.unpickle[List[Int]]
Run Code Online (Sandbox Code Playgroud)

这个例子提出了一些问题.首先,它跳过将对象转换为字符串.显然你需要调用pckl.value来获取json字符串表示.

Unpickling更令人困惑.反序列化是将字符串(或字节)转换为对象的行为.如果没有对象的字符串/ binry表示,这个"示例"如何演示反序列化?

那么,如何用酸洗库反序列化简单对象呢?

Dav*_*ber 6

使用类型系统和案例类来实现您的目标.您可以在层次结构中对某些优秀类型进行unpickle(包括AnyRef).这是一个例子:

trait Zero
case class One(a:Int) extends Zero
case class Two(s:String) extends Zero

object Test extends App {
  import scala.pickling._
  import json._

  // String that can be sent down a wire
  val wire: String = Two("abc").pickle.value

  // On the other side, just use a case class
  wire.unpickle[Zero] match {
    case One(a) => println(a)
    case Two(s) => println(s)
    case unknown => println(unknown.getClass.getCanonicalName)
  }
}
Run Code Online (Sandbox Code Playgroud)