我有一个json字符串,我应该将它deSerialize到下面的类
class Data <T> {
int found;
Class<T> hits
}
我该怎么做呢?这是通常的方式
mapper.readValue(jsonString, Data.class);
但是我怎么提到T代表什么呢?
发布于 2012-07-26 19:49:19
您需要为使用的每个泛型类型创建一个TypeReference
对象,并将其用于反序列化。例如:
mapper.readValue(jsonString, new TypeReference<Data<String>>() {});
发布于 2012-07-27 12:39:43
您不能这样做:您必须指定完全解析的类型,如Data<MyType>
。T
只是一个变量,as是没有意义的。
但是,如果您的意思是T
将是已知的,而不是静态的,那么您需要动态地创建TypeReference
的等价物。引用的其他问题可能已经提到了这一点,但它应该类似于:
public Data<T> read(InputStream json, Class<T> contentClass) {
JavaType type = mapper.getTypeFactory().constructParametricType(Data.class, contentClass);
return mapper.readValue(json, type);
}
发布于 2013-01-07 18:06:28
你要做的第一件事是序列化,然后你就可以反序列化了。
因此,在进行序列化时,应该使用@JsonTypeInfo
让jackson将类信息写入到json数据中。你可以这样做:
Class Data <T> {
int found;
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class")
Class<T> hits
}
然后,当你反序列化时,你会发现jackson已经将你的数据反序列化为一个类,你的变量在运行时实际命中了这个类。
https://stackoverflow.com/questions/11664894
复制相似问题