首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jackson-dataformat-xml重写ArrayList XML序列化

使用jackson-dataformat-xml重写ArrayList XML序列化
EN

Stack Overflow用户
提问于 2015-11-28 18:03:54
回答 1查看 1.2K关注 0票数 2

如果我使用jackson-dataformat-xml来序列化JsonNode的ArrayList,它会产生以下结果:

代码语言:javascript
复制
<ArrayList><item>...</item><item>...</item></ArrayList>

我想把它读成:

代码语言:javascript
复制
<events><event>...</event><event>...</event></events>

我尝试过使用定制的序列化程序,并给出了我想要的<event/>标记,但它仍然将所有内容包装在一个<ArrayList><item></item></ArrayList>

代码语言:javascript
复制
public class ArrayListSerializer extends JsonSerializer<ArrayList<JsonNode>> {

    @Override
    public void serialize(ArrayList<JsonNode> value, JsonGenerator gen,
            SerializerProvider serializers)
            throws IOException, JsonProcessingException {
        gen.writeStartObject();

        for (JsonNode node : value) {
            gen.writeObjectField("event", node);
        }

        gen.writeEndObject();
    }

    @Override
    public Class<ArrayList<JsonNode>> handledType() {
        @SuppressWarnings("unchecked")
        Class<ArrayList<JsonNode>> typeClass = (Class<ArrayList<JsonNode>>)(Class<?>)List.class;
        return typeClass;
    }
}

有什么建议吗?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-12-06 04:32:06

您还可以考虑使用annotations定义XML元素名称。下面是一个示例:

代码语言:javascript
复制
public class JacksonXmlArray {
    static class Document {
        @JsonProperty
        @JacksonXmlElementWrapper(localName = "events")
        @JacksonXmlProperty(localName = "event")
        List<String> events = Arrays.asList("a", "b");
    }
    public static void main(String[] args) throws JsonProcessingException {
        final XmlMapper xmlMapper = new XmlMapper();
        System.out.println(xmlMapper.writeValueAsString(new Document()));
    }
}

输出:

代码语言:javascript
复制
<Document xmlns=""><events><event>a</event><event>b</event></events></Document>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33970057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档