2

我在 JSON 反序列化方面遇到了这个特定问题。让我们有这个 JSON 结构:

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

JSON 结构无法更改,因为它来自第 3 方系统。

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

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

    //...getter, setter
}

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

Pojo instance = new ObjectMapper().readValue("{\"field\": \"value\"}", Pojo.class);

这是我的问题。让我们有另一个反序列化器 PojosCollectionDeserializer,它采用上述结构并将其反序列化为 Pojo 实例的集合。我想以与上一个示例类似的方式使用它:

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

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

4

1 回答 1

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);

没有任何额外的配置或注释。对于这样的简单情况,无需构建自定义序列化器或反序列化器。

于 2011-03-04T18:04:42.623 回答