我正在使用java中的ObjectMapper类对JSON对象进行反序列化.我正在获取不同类型的对象(?extends Something)并想知道是否有任何方法以某种通用方式对它们进行反序列化.该readValue方法获取输出对象的类型的一些类型对象,以便它是某种强类型.
杰克逊不仅可以将类型擦除的类作为目标类型,还可以使用通常的"超类型令牌"模式的TypeReference.来自Jackson FAQ:
List<MyBean> result = mapper.readValue(src, new TypeReference<List<MyBean>>() { });
Run Code Online (Sandbox Code Playgroud)
这适用于各种通用类型,而不仅仅是地图和集合.这是为了你想到泛型类型; 所以你只有一个类但有多个参数变化.
但听起来好像你想要的实际上是支持反序列化多态类型; 这也是支持(截至Jackson 1.5,请参阅http://wiki.fasterxml.com/JacksonPolymorphicDeserialization).
编辑:在另一个答案给出样本类,杰克逊的方式是:
import org.codehaus.jackson.annotate.JsonTypeInfo;
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS)
public abstract class Message
{
protected Message(){ }
}
Run Code Online (Sandbox Code Playgroud)
并通过以下方式反序列化:
Message msg = objectMapper.readValue(json, Message.class);
Run Code Online (Sandbox Code Playgroud)
获取Message的任何子类.并使用'objectMapper.writeValue();'序列化