使用 Jackson 将 JSON 反序列化为 ArrayList<POJO>
我有一个Java类,我有兴趣从JSON反序列化。我配置了一个特殊的 MixIn 类,来帮助我进行反序列化。 只有和实例变量与适当的 getter 和 setter 组合。 看起来像这样:MyPojo
MyPojoDeMixIn
MyPojo
int
String
MyPojoDeMixIn
public abstract class MyPojoDeMixIn {
MyPojoDeMixIn(
@JsonProperty("JsonName1") int prop1,
@JsonProperty("JsonName2") int prop2,
@JsonProperty("JsonName3") String prop3) {}
}
在我的测试客户端中,我执行以下操作,但当然它在编译时不起作用,因为存在与类型不匹配相关的问题。JsonMappingException
ObjectMapper m = new ObjectMapper();
m.getDeserializationConfig().addMixInAnnotations(MyPojo.class,MyPojoDeMixIn.class);
try { ArrayList<MyPojo> arrayOfPojo = m.readValue(response, MyPojo.class); }
catch (Exception e) { System.out.println(e) }
我知道我可以通过创建一个只有 a 的“Response”对象来缓解这个问题,但是我必须为我想要返回的每个类型创建这些有点无用的对象。ArrayList<MyPojo>
我还在网上看了JacksonInFiveMinutes,但花了一段可怕的时间来理解这些东西以及它与我的问题的关系。如果你不能分辨,我是Java的新手,并且来自Obj-C背景。他们特别提到:Map<A,B>
除了绑定到 POJO 和“简单”类型之外,还有一个额外的变体:绑定到泛型(类型化)容器的变体。由于所谓的类型擦除(Java使用这种类型擦除以某种向后兼容的方式实现泛型),这种情况需要特殊处理,这会阻止您使用像Collection.class(不编译)这样的东西。
因此,如果要将数据绑定到 Map 中,则需要使用:
Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });
如何直接反序列化为 ?ArrayList