當使用Jackson序列化爲XML時,我似乎遇到了問題。我的代碼如下:將ArrayList中的對象序列化爲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;
}
}
TESTCHILD
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;
}
}
使用
Serializatio n:
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);
我在做的是從classpath中的一個文件夾中加載一個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 Type Erasure可能是問題,但如果處理器找不到類型,我認爲它不能讀取XML字符串,因爲它不能實例化TestChild類。 – Prmths
鏈接到SSCCE:https://www.sugarsync.com/pf/D7626132_721_921097897 – Prmths
更新:試圖按以下問題的指示後 http://stackoverflow.com/questions/2525042/how-to-convert -a-json-string-to-a-mapstring-string-with-jackson-json http://stackoverflow.com/questions/6846244/jackson-and-generic-type-reference http://stackoverflow.com/questions/9829403/deserialize-json-to-arraylistpojo-using-jackson http://stackoverflow.com/questions/15430715/casting-linkedhashmap-to-complex-object 我還沒有找到解決方案。我在考慮一個自定義序列化器,但我不知道這是我需要的。 – Prmths