gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:30:55 25 4
gpt4 key购买 nike

我在序列化我的类中的字段时遇到问题,该类是 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>

有什么想法吗?

最佳答案

问题来自 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;
}
}

关于java - JAXB - 如何序列化集合子类中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10924848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com