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
}
}