我尝试在 Scala 中使用“pickling”序列化,并且我看到了演示它的相同示例:
import scala.pickling._
import json._
val pckl = List(1, 2, 3, 4).pickle
取消酸洗就像酸洗一样简单:
val lst = pckl.unpickle[List[Int]]
这个例子提出了一些问题。首先,它跳过对象到字符串的转换。显然你需要调用 pckl.value 来获取 json 字符串表示形式。
Unpickle 更令人困惑。反序列化是将字符串(或字节)转换为对象的行为。如果没有对象的字符串/二进制表示,这个“示例”为什么演示反序列化?
那么,如何使用 pickling 库反序列化简单对象?
最佳答案
使用类型系统和案例类来实现您的目标。您可以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)
}
}
关于Scala酸洗: how?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23072118/