Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAXB-如何序列化集合子类中的字段_Java_Jaxb - Fatal编程技术网

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

Java JAXB-如何序列化集合子类中的字段,java,jaxb,Java,Jaxb,我的类是ArrayList的子类,在序列化类中的字段时遇到问题。添加到列表中的项目已序列化,但字段未序列化: @XmlRootElement 公共静态类NumberedList扩展了ArrayList{ @XmlAttribute 私有整数=5; @XML列表 公共列表getNames(){ 归还这个; } 公共编号列表(){ 添加(“a”); 添加(“b”); } } @XmlRootElement 公共静态类现场测试{ @XmlElement NumberedList=新的NumberedL

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

@XmlRootElement
公共静态类NumberedList扩展了ArrayList{
@XmlAttribute
私有整数=5;
@XML列表
公共列表getNames(){
归还这个;
}
公共编号列表(){
添加(“a”);
添加(“b”);
}
}
@XmlRootElement
公共静态类现场测试{
@XmlElement
NumberedList=新的NumberedList();
}
公共静态void main(字符串[]args)引发异常{
JAXBContext context=JAXBContext.newInstance(FieldTest.class);
Marshaller=context.createMarshaller();
marshaller.marshall(新的FieldTest(),System.out);
}
//将NumberedList序列化为字段的输出:不存在任何数字字段

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><fieldTest><list>a</list><list>b</list></fieldTest>
ab
奇怪的是,当我将列表添加到映射中时,类中的字段会按照我的预期进行序列化

@XmlRootElement
公共静态类NumberedList扩展了ArrayList{
@XmlAttribute
私有整数=5;
@XML列表
公共列表getNames(){
归还这个;
}
公共编号列表(){
添加(“a”);
添加(“b”);
}
}
@XmlRootElement
公共静态类映射测试{
@XmlElement
Map Map=Maps.newHashMap();
公共地图测试(){
put(1,newnumberedlist());
}
}
公共静态void main(字符串[]args)引发异常{
JAXBContext context=JAXBContext.newInstance(MapTest.class);
Marshaller=context.createMarshaller();
marshaller.marshall(新的MapTest(),System.out);
}
//序列化映射中的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>
1ab

有什么想法吗?

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

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

其中,正如第一次一样,您没有执行..

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

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

与第一次一样,您没有这样做。

问题在于
NumberedList
正在扩展
ArrayList
。将内部
ArrayList
添加到类中,然后将其与
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;
    }
}
@XmlRootElement
公共静态类编号列表{
私有列表名称=新的ArrayList();
@XmlAttribute
私有整数=5;
公共编号列表(){
名称。添加(“a”);
名称。添加(“b”);
}
@XML列表
公共列表getNames(){
返回姓名;
}
}

问题源于
NumberedList
正在扩展
ArrayList
。将内部
ArrayList
添加到类中,然后将其与
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;
    }
}
@XmlRootElement
公共静态类编号列表{
私有列表名称=新的ArrayList();
@XmlAttribute
私有整数=5;
公共编号列表(){
名称。添加(“a”);
名称。添加(“b”);
}
@XML列表
公共列表getNames(){
返回姓名;
}
}