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

Parse JSON with Interface/trait and Different implementations

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

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

这工作正常。但是,我希望做更多的事情。假设我的 class 有一个类型为 List[SomeTrait] 的对象,其中 SomeTrait 是一个 trait。我有两个具有不同构造函数签名的特征的不同实现,但显然以不同方式实现相同的方法。

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

的新实现

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

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

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