杰克逊:对一个集合进行反序列化

时间:2011-03-03 18:02:50

标签: java json jackson deserialization

我有JSON反序列化的这个特定问题。让我们有这个JSON结构:

{
  "header":{
    "objects":[
      {"field":"value1"},
      {"field":"value2"}
    ]
  }
}

JSON结构不能改变,因为它来自第三方系统。

现在让我们来看看这个简单的POJO:

@JsonDeserialize(using=PojoDeserializer.class)
public class Pojo {
    private string field;

    //...getter, setter
}

提到的PojoDeserializer使用{“field”:“value”} json字符串并将其反序列化为Pojo实例。所以我可以像这样简单地进行反序列化

  

Pojo instance = new   。ObjectMapper()readValue( “{\” 字段\“:   \“value \”}“,Pojo.class);

这是我的问题。让我们有另一个反序列化器PojosCollectionDeserializer,它接受上面提到的结构并将其反序列化为Pojo实例的Collection。我想以与前一个例子类似的方式使用它:

Collection<Pojo> pojos = new ObjectMapper().readValue("{...}", Collection.class);

但这不起作用,因为没有定义使用PojosCollectionDeserializer创建Collection。有没有办法实现它?

1 个答案:

答案 0 :(得分:2)

我不确定为什么要尝试明确指定反序列化器,因为它们都能正常工作:

public class Message {
    public Header header; // or, if you prefer, getter and setter
}
public class Header {
    public List<Pojo> objects;
}
public class Pojo {
    public String field;
}

Message msg = objectMapper.readValue(json, Message.class);

没有任何其他配置或注释。对于像这样的简单情况,不需要构造自定义序列化器或反序列化器。