如何使用uPickle

时间:2015-10-16 22:18:05

标签: scala scala.js upickle

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

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

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

是否有无样板且更简单的方法可以做到这一点?

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

Converting nested case classes to nested Maps using Shapeless

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

2 个答案:

答案 0 :(得分:6)

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

应该这样做。如果你发现自己做了很多事,你可以把它包装好。

存在类似的调用来向js.Dynamic写东西,反之亦然

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

虽然你可以在这里省略类型参数,因为它将被推断

答案 1 :(得分:1)

上述答案不再适用于较新版本的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)