【发布时间】:2014-05-07 05:16:18
【问题描述】:
我有一个抽象超类 A 我有几个具体的子类 B、C、D
在序列化方面我这样做:
List<A> list = new ArrayList<A>();
B b = new B();
C c = new C();
D d = new D();
list.add(b);
list.add(c);
list.add(d);
json = mapper.writeValueAsString(list);
没问题。我现在想反序列化它。我知道我不能实例化一个抽象类,所以这是怎么做的?
这不起作用:
list = mapper.readValue(json,new TypeReference<List<A>>() {});
编辑:我将此添加到我的抽象超类中:(仍然没有运气)
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class")
public abstract class A {
再次编辑:我现在收到此错误:
Unexpected token (END_OBJECT), expected FIELD_NAME: missing property '@class' that is to contain type id
查看 JSON,@class 不存在。我如何让它在那里? 我试过了:
@JsonDeserialize(as=B.class)
public class B extends A {
但这没有用。这有什么例子吗?如何告诉对象映射器将我的注释用于类?任何这方面的例子都会很棒。
【问题讨论】:
-
也许this 会有所帮助。
标签: java json serialization jackson