【问题标题】:Why is my List not serialized in JAXB?为什么我的列表没有在 JAXB 中序列化?
【发布时间】:2011-12-08 15:29:24
【问题描述】:

我是使用 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 编组 Student 时,结果字符串中只有 id-Element。我没有名单(人)。问题出在哪里?

【问题讨论】:

    标签: java xml xml-serialization jaxb


    【解决方案1】:

    你不需要做任何特别的事情来编组List 属性。只需确保以下其中一项为真:

    如果您使用的是 JAXB 参考实现并且有一个用于 List 属性的 getter 但没有 setter,那么您需要使用 @XmlElement 注释该 getter

    @XmlRootElement
    public class Students implements Serializable{
    
        private static final long serialVersionUID = 1L;
    
        private List<Person> personList;
    
        @XmlElement
        public List<Person> getPersonList() {
            return personList;
        }
    
    }
    

    如果您没有公共访问者,请确保您使用的是字段访问:

    @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;
        }
    
    }
    

    更多信息

    【讨论】:

    • 奇怪的是,您的第一个示例仅在 personList 去掉 List 后缀时才有效。否则你是对的。
    • +1,个人不确定@XmlRootElement,我认为没必要
    • @korifey - 你是对的,如果Person 从来都不是根对象,那么就没有必要了。
    • @DMoses - 字段名称无关紧要。您在注释字段时是否看到了这一点?
    • @BlaiseDoughan 我猜这是我的用户错误。但即使使用吸气剂,我也需要@XmlAccessorType(XmlAcceesType.FIELD) 才能在我的测试中工作。
    【解决方案2】:

    嗯,尝试将 Person 类标记为 @XmlType(我认为不是必需的),并将 Student 和 Person 类的所有字段标记为 @XmlElement

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-18
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    相关资源
    最近更新 更多