43

要将 JSON 字符串反序列化为类列表,StackOverflow 问题中列出了不同的方法

类型 1(文档链接):

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

类型 2(文档链接):

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

尽管上述两种类型都可以完成工作,但这些实现之间有什么区别?

4

2 回答 2

41

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

第二个是完全静态的,所以类型在编译类型中必须是已知的,并且不能变化。所以它类似于使用基本的类文字。

第一个是动态的,所以它可以用来构造参数化不同的东西。

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

于 2012-08-14T17:39:47.440 回答
0

实现这一目标的另一种方法是:

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

于 2020-03-10T23:49:08.900 回答