2

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

<ArrayList><item>...</item><item>...</item></ArrayList>

我想让它阅读:

<events><event>...</event><event>...</event></events>

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

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

有什么建议么?谢谢。

4

1 回答 1

2

您还可以考虑使用注释定义 XML 元素名称。这是一个例子:

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

输出:

<Document xmlns=""><events><event>a</event><event>b</event></events></Document>
于 2015-12-05T20:32:05.537 回答