繁体   English   中英

如何反序列化地图 <String, Object> 使用不同类型的不同键与杰克逊?

[英]How to deserialize a Map<String, Object> using different type for different key with jackson?

有一个库类,定义是:

class LibraryBean {
    public String tag;
    public Map<String, Object> attributes;
}

在我的应用程序代码中,我知道attributes映射的每个可能的键,并且某个键的值的类型是固定的,例如,如果键是"location"则值类型是Location ,如果键是"timestamp"然后值类型为Long ArrayList<LibraryBean>写入json字符串很简单,但是如何反序列化json字符串以使值恢复其类型?

public void test(ArrayList<LibraryBean> sampleList) { 
        ObjectMapper mapper = new ObjectMapper();
        String jsonString = mapper.writeAsString(sampleList);

        List<LibraryBean> recovered = mapper.readValue(jsonString); // what should I do here?

        // I'm sure sampleList.get(0).attributes.get("location") != null
        AssertTrue(sampleList.get(0).attributes.get("location") instanceof Location);
    }

为已知字段创建您的pojo:

class Attributes {
    private Location location;
    ...
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();

    ... getters and setters

    @JsonAnyGetter
    public Map<String, Object> getAdditionalProperties() {
        return this.additionalProperties;
    }

    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value) {
        this.additionalProperties.put(name, value);
    }

}

class LibraryBean {
    private String tag;
    private Attributes attributes;

    ... getters and setters
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM