2011-12-08 74 views
3

我是新來的使用JAXB,我現在正在努力解決問題。也許你可以幫助我。爲什麼我的List沒有在JAXB中序列化?

我有以下代碼:

@XmlRootElement 
public class Students implements Serializable{ 

private static final long serialVersionUID = 1L; 

private List<Person> personList; 
private int id; 

// getters and setters for the attributes 

} 

@XmlRootElement 
public class Person implements Serializable { 

private static final long serialVersionUID = 1L; 

private String name; 
private int sex; 

    //getters and setters for the attributes 
} 

當我嘗試名帥學生這跟JAXB,我只有ID-元素所產生的字符串中。我沒有清單(人員)。問題在哪裏?

回答

6

學生和課堂培訓的所有領域沒有什麼特別的東西,你需要做元帥List性質。只要確保下列條件之一爲真:

如果您使用的是JAXB參考實現,並有對List財產,但沒有setter一個getter,那麼你將需要與註釋吸氣@XmlElement

@XmlRootElement 
public class Students implements Serializable{ 

    private static final long serialVersionUID = 1L; 

    private List<Person> personList; 

    @XmlElement 
    public List<Person> getPersonList() { 
     return personList; 
    } 

} 

如果你沒有一個公共accesssor,請確保您使用的字段訪問:

@XmlRootElement 
@XmlAccessorType(XmlAcceesType.FIELD) 
public class Students implements Serializable{ 

    private static final long serialVersionUID = 1L; 

    private List<Person> personList; 

} 

如果您對List屬性getter和setter,那麼你不需要做任何事情:

@XmlRootElement 
public class Students implements Serializable{ 

    private static final long serialVersionUID = 1L; 

    private List<Person> person = new ArrayList<Person>(); 

    public List<Person> getPersonList() { 
     return person; 
    } 

    public void setPersonList(List<Person> personList) { 
     this.person = personList; 
    } 

} 

更多信息

+0

奇怪的是,你的第一個例子只適用於'personList'擺脫'列表後綴。否則,你是對的。 –

+0

+1,不知道@XmlRootElement在Person中,我認爲它不是必需的 – korifey

+0

@korifey - 你是對的,如果Person不是根對象,那麼它就沒有必要。 –

0

嗯,試圖以紀念類Person爲@XmlType(不neccessary,我認爲)和@XmlElement

+2

JAXB不需要任何註釋對象封送到XML。他們只需要覆蓋默認規則:http://wiki.eclipse.org/EclipseLink/Examples/MOXy/GettingStarted/TheBasics –

+0

感謝您的澄清 – korifey

相關問題