2011-12-08 36 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

相关问题