标签: upickle

uPickle和ScalaJS:密封特征序列化

我正试图找到一个基本的上瘾的例子来工作,似乎我在这里遗漏了一些东西.我想尝试在自述文件页面上提供的upickle示例

import upickle._

sealed trait A
@key("Bee") case class B(i: Int) extends A
case object C extends A
Run Code Online (Sandbox Code Playgroud)

然后,我的代码是:

object Model {
  def main(args: Array[String]): Unit = {

    val a = B(5): A
    println(a)

    val out = write(a)
    println(out)

    val a2 = read[A](out)
    println(a2)

    println(a == a2)

  }
}
Run Code Online (Sandbox Code Playgroud)

我得到的只是错误:

引用的特征[[A]]没有任何子类.这可能由于scalac(SI-7046)的限制而发生,因为该特征不在同一包装中.如果是这种情况,则可以使用整数常量来定义层次结构.

我有两个问题:

  • 我怎样才能说服uPickle这个特性在同一个包里?(因为它是.)
  • 或者,如果我不能:如何使用整数常量定义层次结构?

serialization scala scala.js upickle

8
推荐指数
1
解决办法
694
查看次数

如何使用uPickle将case类序列化/反序列化为js.Dynamic

我使用uPickle/ScalaJS使用此代码片段将js.Dynamic对象反序列化为case类:

read[myClass](JSON.stringify(dynObj))
Run Code Online (Sandbox Code Playgroud)

其中myClass是case类,dynObj是js.Dynamic对象.

有没有样板,更简单的方法吗?

为了序列化一个case类,我已经能够使用这个例子作为起点,使用Shapeless序列化为js.Dynamic:

使用Shapeless将嵌套的case类转换为嵌套的Maps

我希望能够使用uPickle代替这一点.如何用uPickle完成往返旅行?

scala scala.js upickle

5
推荐指数
1
解决办法
768
查看次数

如何在upickle中读取带有由缺失字段序列化的可选字段的json

我使用 upickle 在 scalajs 中序列化 json。我需要能够解析由空值和缺失字段(网络上的标准 json)表示的可选字段。

使用 OptionPickler,我可以接受可为空的项目。但是,我如何接受缺少的字段?下面的这个例子处理空name字段,但它在缺少的address字段上失败。

// from http://www.lihaoyi.com/upickle/ -> object OptionPickler
object OptionPickler extends upickle.AttributeTagged {
  override implicit def OptionWriter[T: Writer]: Writer[Option[T]] =
    implicitly[Writer[T]].comap[Option[T]] {
      case None => null.asInstanceOf[T]
      case Some(x) => x
    }

  override implicit def OptionReader[T: Reader]: Reader[Option[T]] = {
    new Reader.Delegate[Any, Option[T]](implicitly[Reader[T]].map(Some(_))) {
      override def visitNull(index: Int) = None
    }
  }
}

case class Person(id: Int, name: Option[String], address: Option[String])
implicit val personRW: OptionPickler.ReadWriter[Person] = OptionPickler.macroRW[Person]
val personJson = …
Run Code Online (Sandbox Code Playgroud)

json scala scala-option upickle

5
推荐指数
1
解决办法
337
查看次数

标签 统计

scala ×3

upickle ×3

scala.js ×2

json ×1

scala-option ×1

serialization ×1