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的输出:
有任何想法吗?
问题来自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()); }
在第一个你不做的地方..