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