Json Jackson:混合静态/动态类型处理

Json Jackson:混合静态/动态类型处理,json,jackson,Json,Jackson,我正在使用 @JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="_class") class Base { } class Derived1 extends Base { ... } class Derived2 extends Base { ... } ... 序列化和反序列化多态基类。这很好,但我不得不在JSON文档中的任何地方都包含_class

我正在使用

@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY,
              property="_class")
class Base { }
class Derived1 extends Base { ... }
class Derived2 extends Base { ... }
...
序列化和反序列化多态基类。这很好,但我不得不在JSON文档中的任何地方都包含_class属性,即使在编译时已知实际类型的地方也是如此。我有很多派生类(没有一个是多态的)和很多我无法控制的JSON文档,所以我只想在声明的类实际上是基类的情况下使用动态类型信息

这对杰克逊有可能吗?例如,我希望以下各项能够发挥作用:

package json_demo;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.databind.ObjectMapper;
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS,
              include=JsonTypeInfo.As.PROPERTY, property="_class")
class Base {
   public int baseMember_;
}
class Derived extends Base {
   public int derivedMember_;
}
class Demo {
   public Derived member_;
}
public class Main
{
   public static void main( String[] args ) throws Exception
   {
      final String input = "{ \"member_\": { \"baseMember_\":1," 
                         + "\"derivedMember_\":2 } }";
      ObjectMapper mapper = new ObjectMapper();
      mapper.readValue(input, Demo.class);  // throws, why?
   }
}
我从readValue()得到的异常是

它表示“缺少属性'\u class',那么json字符串应该如下所示:

{
    "member_": {
        "_class": "json_demo.Derived",
        "baseMember_": 1,
        "derivedMember_": 2
    }
}

我相信您必须对
派生的
类进行注释,以覆盖
上的注释。这样,Jackson就不会期望使用
\u class
属性。
{
    "member_": {
        "_class": "json_demo.Derived",
        "baseMember_": 1,
        "derivedMember_": 2
    }
}