首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Jackson -使用泛型类进行反序列化

Jackson -使用泛型类进行反序列化
EN

Stack Overflow用户
提问于 2012-07-26 16:02:16
回答 9查看 218.4K关注 0票数 198

我有一个json字符串,我应该将它deSerialize到下面的类

class Data <T> {
    int found;
    Class<T> hits
}

我该怎么做呢?这是通常的方式

mapper.readValue(jsonString, Data.class);

但是我怎么提到T代表什么呢?

EN

回答 9

Stack Overflow用户

发布于 2012-07-26 19:49:19

您需要为使用的每个泛型类型创建一个TypeReference对象,并将其用于反序列化。例如:

mapper.readValue(jsonString, new TypeReference<Data<String>>() {});
票数 325
EN

Stack Overflow用户

发布于 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);
}
票数 102
EN

Stack Overflow用户

发布于 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已经将你的数据反序列化为一个类,你的变量在运行时实际命中了这个类。

票数 36
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11664894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档