我和Jackson在 java 工作。
我有一个抽象类base.class,如下所示:
@JsonDeserialize(as = Child1.class)
public abstract class Base {
@JsonProperty("field1")
private Boolean field1;
@JsonProperty("field2")
private Long field2;
//getters, setters
}
以及一组扩展抽象类的子类,如下所示:
public class Child1 extends Base {
@JsonProperty("field3")
private Boolean field3;
@JsonProperty("field4")
private Long field4;
//getters, setters
}
当我反序列化以下json时,它工作得非常好:
Base base = mapper.readValue(new File("src/test/resources/testerTemplate/example.json"), Base.class)
example.json:
{
"field1":true,
"field2":123456,
"field3":false,
"field4":123456,
}
问题是,这将此结构限制为基类和子类之间的一对一关系—要反序列化为其他子类,我每次都需要更改注解。我试过其他注解,但一直没能解决。我该怎么做?
1条答案
按热度按时间wfypjpf41#
我已经制定了一个解决方案,允许代码做我需要它做的事情,尽管我对结果并不完全满意。尽管如此,它还是有效的。
解决方案是通过将反序列化的中间抽象类而不是base.class来扩展base.class,如下所示:
base.class(包含反序列化子类时要包含的泛型字段):
将用于反序列化特定子级的“扩展”类:
孩子们。班级:
这意味着对于每个子类,我们将创建一个从base.class扩展而来的空抽象类。
然后反序列化如下:
它不是完美的,但它是有效的。