JAXB – 如何序列化集合的子类中的字段

我无法序列化我的类中的字段,这是ArrayList的子类。 添加到列表中的项目是序列化的,但字段不是:

@XmlRootElement public static class NumberedList extends ArrayList{ @XmlAttribute private int number = 5; @XmlList public List getNames(){ return this; } public NumberedList(){ add("a"); add("b"); } } @XmlRootElement public static class FieldTest{ @XmlElement NumberedList list = new NumberedList(); } public static void main(String[] args) throws Exception{ JAXBContext context = JAXBContext.newInstance(FieldTest.class); Marshaller marshaller = context.createMarshaller(); marshaller.marshal(new FieldTest(), System.out); } 

//将NumberedList序列化为字段的输出:不存在数字字段

 ab 

奇怪的是,当我将列表添加到Map时,我的类中的字段会按照我的预期进行序列化。

 @XmlRootElement public static class NumberedList extends ArrayList{ @XmlAttribute private int number = 5; @XmlList public List getNames(){ return this; } public NumberedList(){ add("a"); add("b"); } } @XmlRootElement public static class MapTest{ @XmlElement Map map = Maps.newHashMap(); public MapTest(){ map.put(1, new NumberedList()); } } public static void main(String[] args) throws Exception{ JAXBContext context = JAXBContext.newInstance(MapTest.class); Marshaller marshaller = context.createMarshaller(); marshaller.marshal(new MapTest(), System.out); } 

//在Map中序列化NumberedList的输出:

 1a b 

有任何想法吗?

问题来自NumberedList扩展ArrayList的事实。 将一个内部ArrayList添加到类中,然后将其与NumberedList中存在的其他字段一起序列化。 请参阅以下代码:

 @XmlRootElement public static class NumberedList { private List names = new ArrayList(); @XmlAttribute private int number = 5; public NumberedList(){ names.add("a"); names.add("b"); } @XmlList public List getNames(){ return names; } } 

我在两个类中看到你有根元素..这是根本错误的..你只能有一个根元素..所以从NumberedList中删除它。 在第二步中,我看到你正在初始化地图

 public MapTest(){ map.put(1, new NumberedList()); } 

在第一个你不做的地方..