2

我在序列化类中的字段时遇到问题,这是 ArrayList 的子类。添加到列表中的项目是序列化的,但字段不是:

@XmlRootElement
public static class NumberedList extends ArrayList<String>{

    @XmlAttribute
    private int number = 5;

    @XmlList
    public List<String> 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 序列化为字段的输出:不存在数字字段

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><fieldTest><list>a</list><list>b</list></fieldTest>

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

@XmlRootElement
public static class NumberedList extends ArrayList<String>{

    @XmlAttribute
    private int number = 5;

    @XmlList
    public List<String> getNames(){
        return this;
    }

    public NumberedList(){
        add("a");
        add("b");
    }
}

@XmlRootElement
public static class MapTest{
    @XmlElement
    Map<Integer, NumberedList> 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 的输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><mapTest><map><entry><key>1</key><value number="5"><names>a b</names></value></entry></map></mapTest>

有任何想法吗?

4

2 回答 2

0

NumberedList问题来自于正在扩展的事实ArrayListArrayList向该类添加一个内部,然后将其与NumberedList. 请参阅以下代码:

@XmlRootElement
public static class NumberedList {
    private List<String> names = new ArrayList<String>();

    @XmlAttribute
    private int number = 5;

    public NumberedList(){
        names.add("a");
        names.add("b");
    }

    @XmlList
    public List<String> getNames(){
        return names;
    }
}
于 2013-09-03T07:48:33.183 回答
-1

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

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

在第一个你没有做的地方..

于 2013-09-03T06:57:18.643 回答