【发布时间】:2013-08-04 22:17:28
【问题描述】:
我在使用 Jackson 序列化为 XML 时似乎遇到了问题。我的代码如下:
测试容器
package com.test;
import java.util.ArrayList;
import com.fasterxml.jackson.annotation.JsonProperty;
public class TestContainer {
private String testContainerID;
private String testContainerMessage;
private ArrayList<TestChild> testContainerChildren;
@JsonProperty("TestContainerID")
public String getTestContainerID() {
return testContainerID;
}
@JsonProperty("TestContainerID")
public void setTestContainerID(String testContainerID) {
this.testContainerID = testContainerID;
}
@JsonProperty("TestContainerMessage")
public String getTestContainerMessage() {
return testContainerMessage;
}
@JsonProperty("TestContainerMessage")
public void setTestContainerMessage(String testContainerMessage) {
this.testContainerMessage = testContainerMessage;
}
@JsonProperty("TestContainerChildren")
public ArrayList<TestChild> getTestContainerChildren() {
return testContainerChildren;
}
@JsonProperty("TestContainerChildren")
public void setTestContainerChildren(ArrayList<TestChild> testContainerChildren) {
this.testContainerChildren = testContainerChildren;
}
}
测试孩子
package com.test;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonRootName;
@JsonRootName(value="TestChild")
public class TestChild {
private String testChildID;
private String testChildMessage;
@JsonProperty("TestChildID")
public String getTestChildID() {
return testChildID;
}
@JsonProperty("TestChildID")
public void setTestChildID(String testChildID) {
this.testChildID = testChildID;
}
@JsonProperty("TestChildMessage")
public String getTestChildMessage() {
return testChildMessage;
}
@JsonProperty("TestChildMessage")
public void setTestChildMessage(String testChildMessage) {
this.testChildMessage = testChildMessage;
}
}
使用
-
序列化:
XmlMapper xm = new XmlMapper(); TestContainer tc = xm.readValue(sb.toString(), TestContainer.class);
-
反序列化:
System.out.println(xm.writeValueAsString(tc)); tc = xm.readValue(sb.toString(), TestContainer.class);
我正在做的是从类路径上的一个文件夹中加载一个 XML 文件,并将该文件的内容放入一个 StringBuffer 中。问题是为对象集合生成的 XML。在编写 XML 时,我想要类似:
<TestContainerChildren><TestChild><...(Element Details)...></TestChild></TestContainerChildren>
但我得到了:
<TestContainerChildren><TestContainerChildren><...(Element Details)...><TestContainerChildren></TestContainerChildren>
我不确定我错过了什么,在这里。我对序列化/反序列化的 JSON 部分没有问题,只有 XML。我尝试使用 Jackson 和 JAXB 注释来关闭包装,我尝试使用以下注释:
- @JsonRootName
- @JsonProperty
- @JacksonXmlElementWrapper
- @JacksonElement
- @XmlElementWrapper
- @XmlElement
我很确定这对我来说是愚蠢的,但任何帮助将不胜感激。
【问题讨论】:
-
我不明白的是所有属性如何序列化。它只是没有被序列化的子元素的类名。我曾认为 Java 类型擦除可能是问题所在,但如果处理器找不到类型,我认为它无法读取 XML 字符串,因为它无法实例化 TestChild 类。
-
链接到 SSCCE:sugarsync.com/pf/D7626132_721_921097897
-
更新:在尝试按照以下问题的指示进行操作后stackoverflow.com/questions/2525042/…stackoverflow.com/questions/6846244/…stackoverflow.com/questions/9829403/…stackoverflow.com/questions/15430715/… 我仍然没有找到有效的解决方案。我正在考虑一个自定义序列化程序,但我不知道这是否是我需要的。
标签: xml-serialization jackson json-deserialization fasterxml