我使用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完成往返旅程?
答案 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)