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

标签 java xml serialization jackson jackson-dataformat-xml

如果我使用 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;
    }
}

有什么建议吗?谢谢。

最佳答案

您还可以考虑使用 annotations 定义 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>

关于java - 使用 jackson-dataformat-xml 重写 ArrayList XML 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33970057/

相关文章:

c# - 使用可以是不同枚举类型的通用枚举来序列化类

java - 将字母转换为数字

java - 如何将文件与 String java 中的文件完全一样保存

java - 水平居中文本

json - Entity Framework : How to map a complex object to a single varchar column (i. e。以序列化形式保存)?

Java 到 Jackson JSON 序列化 : Money fields

java - 从半角片假名转换为全角片假名

java - 无法从 DynamoDB 加载数据,因为 List<Object> 类型的属性无法未转换并使用@DynamoDBDocument 保存

java - 加载 XML 非常慢

xml - 如何存储 XML 数据?