如何使用 uPickle serialize/deserialize 大小写 class 到 js.Dynamic

How to serialize/deserialize case class to js.Dynamic with uPickle

我正在使用 uPickle/ScalaJS 将 js.Dynamic 对象反序列化为一个案例 class,使用以下代码片段:

read[myClass](JSON.stringify(dynObj))

其中 myClass 是 class 并且 dynObj 是 js.Dynamic 对象。

是否有无样板且更简单的方法来执行此操作?

为了序列化案例 class,我已经能够使用 Shapeless 将此示例作为起点序列化为 js.Dynamic:

我希望能够改用 uPickle 来执行此操作。如何使用 uPickle 完成往返?

upickle.default.readJs[myClass](upickle.json.readJs(dynObj))

应该做的。如果您发现自己经常这样做,可以将其包装在一个不错的帮手中。

存在将内容写入 js.Dynamic 的类似调用,恰恰相反

 upickle.json.writeJs(upickle.default.writeJs[myClass](myClassInstance))

虽然您可以在此处省略类型参数,因为它会被推断出来

上面的答案不再适用于更新版本的 upickle。在版本 0.6.5 中,我必须使用以下内容反序列化动态对象:

val someJsObject: js.Dynamic = ...
upickle.WebJson.transform(someJsObject, implicitly[upickle.default.Reader[TargetType]])

要序列化,您可能需要这样的东西:

val sourceObject: SourceType = ...
implicitly[upickle.default.Writer[SourceType]].write(upickle.WebJson.Builder, sourceObject)