使用Interface / trait和不同的实现解析JSON

时间:2017-10-25 14:43:56

标签: json scala lift-json

目前我正在使用lift-json将json解析为对象。这是我一般使用的签名

net.liftweb.json.parse(json).extract[MyClass]

这很好用。但是,我希望再做一点。假设我的类有List[SomeTrait]类型的对象,其中SomeTraittrait。我有两个不同的特征实现与不同的构造函数签名,但显然实现相同的方法不同。

JSON或代码中是否有一种方法可以检测它应该使用哪种实现?这样,解析json的代码可以保持不变但我可以继续添加SomeTrait的新实现

1 个答案:

答案 0 :(得分:1)

据我所知,在Lift中没有简单的方法可以做到这一点。您仍然需要一些属性才能提供有关JSON对象本身的类型信息,因此反序列化器将能够获取正确的实例。

我会使用Jackson JsonTypeInfo注释来标记子类,然后使用它ObjectMapper来完成这项工作。

查看https://github.com/FasterXML/jackson-annotations#handling-polymorphic-types了解更多详情。