像集合属性一样序列化HashMap



这里我有两个类"Student"one_answers"Course":

@XmlRootElement
class Student {
    private String name;
    private HashMap<String, Course> courses;
    public Student() {}
    public Student(String name, HashMap<String, Course> courses) {
        super();
        this.name = name;
        this.courses = courses;
    }
    // -------------------------getters
    @XmlAttribute(name="name")
    public String getName() {
        return name;
    }
    @XmlElement(name = "course")
    public HashMap<String, Course> getCourses() {
        return courses;
    }
    //---------------------------setters
    public void setName(String name) {
        this.name = name;
    }
    public void setCourses(HashMap<String, Course> courses) {
        this.courses = courses;
    }
}

@XmlRootElement
class Course {
    private String id;
    private String name;
    public Course() {}
    public Course(String id, String name) {
        super();
        this.id = id;
        this.name = name;
    }
    @XmlID
    @XmlAttribute(name = "id")
    public String getId() {
        return id;
    }
    @XmlAttribute(name = "name")
    public String getName() {
        return name;
    }
    public void setId(String id) {
        this.id = id;
    }
    public void setName(String name) {
        this.name = name;
    }
}

我想使用JaxB注释将Student类序列化为如下内容:

<Student name="David">
    <courses>
        <Course id="1" name="Fundamentals of Programming"/>
        <Course id="2" name="Advanced Programming">
    </courses>
</Student>

请注意,我希望Student的courses字段为HashMap,并且在解组序列化对象时使用id作为每个Course的键。

您可以在这个用例中使用XmlAdapterXmlAdapter允许您以编程方式将对象转换为另一种类型,以实现数据编组/数据编组。对于您的用例,您将把HashMap转换为具有Course集合的对象的实例。

  • http://blog.bdoughan.com/2010/07/xmladapter-jaxbs-secret-weapon.html

最新更新