使用 JAXB 可将 java List 对象 序列化为 xml,需定义带注解的实体类如 User,并将其 封装 在根元素类 UserListWrapper 中,通过 JAXBContext 和 Marshaller 执行序列化,生成格式化的 XML 输出,适用于 JDK 8 及以下版本,JDK 11+ 需手动引入 JAXB 依赖。

Java 中将 List 对象序列化为 XML,常用的方式是使用 JAXB(Java Architecture for XML Binding)。它能将 Java 对象与 XML 之间相互转换,支持集合类型如 List。下面介绍具体实现步骤和示例代码。
1. 添加实体类并配置 JAXB 注解
要序列化 List 中的对象,首先需要确保 List 中的元素类是可序列化的,并使用 JAXB 注解标记。
示例:定义一个 User 类
@XmlRootElement(name = “user”)
public class User {
private int id;
private String name;
public User() {}
public User(int id, String name) {
this.id = id;
this.name = name;
}
@XmlElement
public int getId() { return id;}
public void setId(int id) {this.id = id;}
@XmlElement
public String getName() { return name;}
public void setName(String name) {this.name = name;}
}
2. 包装 List 并添加根元素
JAXB 不能直接序列化 List,需将其封装在一个类中作为根元素。
示例:创建 UserListWrapper 类
@XmlRootElement(name = “users”)
public class UserListWrapper {
private List<User> userList;
public UserListWrapper() {}
public UserListWrapper(List<User> userList) {
this.userList = userList;
}
@XmlElement(name = “user”)
public List<User> getUserList() { return userList;}
public void setUserList(List<User> userList) {this.userList = userList;}
}
3. 执行序列化操作
使用 JAXBContext 和 Marshaller 将对象输出为 XML字符串 或写入文件。
立即学习“Java 免费学习笔记(深入)”;
示例:序列化 List 到 XML
try {
List<User> users = new ArrayList<>();
users.add(new User(1, “Alice”));
users.add(new User(2, “Bob”));
UserListWrapper wrapper = new UserListWrapper(users);
JAXBContext context = JAXBContext.newinstance(UserListWrapper.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// 输出到控制台
marshaller.marshal(wrapper, System.out);
// 或写入文件
// marshaller.marshal(wrapper, new File(“users.xml”));
} catch (JAXBException e) {
e.printStackTrace();
}
4. 生成的 XML 示例
上述代码会输出如下格式的 XML:
<?xml version=”1.0″ encoding=”UTF-8″?>
<users>
<user>
<id>1</id>
<name>Alice</name>
</user>
<user>
<id>2</id>
<name>Bob</name>
</user>
</users>
基本上就这些。只要正确使用 JAXB 注解,把 List 包装进一个根类,就能顺利实现 Java List 对象到 XML 的序列化。注意 JDK 11 及以上版本需手动添加 JAXB 依赖。不复杂但容易忽略细节。