5

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

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

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

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

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

使用 Shapeless 将嵌套案例类转换为嵌套地图

我希望能够使用 uPickle 来代替。如何使用 uPickle 完成往返?

4

2 回答 2

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

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

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

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

尽管您可以在这里省略类型参数,因为它会被推断

于 2015-10-18T07:32:30.137 回答
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)
于 2018-05-09T00:40:04.057 回答