Jackson - 反序列化JSON字符串 - TypeReference与TypeFactory.constructCollectionType

时间:2012-08-13 14:42:31

标签: java json jackson deserialization

要将JSON字符串反序列化为类列表,StackOverflow question

列出了不同的方法

类型1(docs link):

List<SomeClass> someClassList = mapper.readValue(jsonString, typeFactory.constructCollectionType(List.class, SomeClass.class));

类型2(docs link):

List<SomeClass> list = mapper.readValue(jsonString, new TypeReference<List<SomeClass>>() { });

虽然上述两种类型都可以完成这项工作,但这些实现之间的区别是什么?

2 个答案:

答案 0 :(得分:35)

构造JavaType之后,两者都调用相同的反序列化功能,因此唯一的区别是处理泛型类型的方式。

第二个是完全静态的,因此必须在编译类型中知道类型,并且不能改变。所以它类似于使用基本的Class literal。

第一个是动态的,因此它可以用来构建因参数化而有所不同的东西。

就我个人而言,我更喜欢所有情况下的第一个替代方案(它避免再创建一个匿名内部类),但第二个可能更具可读性。

答案 1 :(得分:0)

您可以通过以下方法实现这一目标的另一种方法:

List<SomeClass> list = Arrays.asList(mapper.readValue(jsonString, SomeClass[].class));