JAXB 嵌套对象序列化和反序列化:详细指南及示例
JAXB 是一种将 Java 对象和 XML 数据相互转换的技术。当 Java 对象中包含嵌套对象时,可以使用 JAXB 实现嵌套对象的 XML 序列化和反序列化。
下面是一个示例,展示了如何使用 JAXB 实现嵌套对象的 XML 序列化和反序列化:
@XmlRootElement
public class Person {
private String name;
private Address address;
public Person() {}
public Person(String name, Address address) {
this.name = name;
this.address = address;
}
@XmlElement
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElement
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
public class Address {
private String street;
private String city;
private String state;
public Address() {}
public Address(String street, String city, String state) {
this.street = street;
this.city = city;
this.state = state;
}
@XmlElement
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
@XmlElement
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
@XmlElement
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
public class Main {
public static void main(String[] args) throws JAXBException {
// 创建一个 Person 对象
Address address = new Address('123 Main St', 'Anytown', 'CA');
Person person = new Person('John Doe', address);
// 将 Person 对象序列化为 XML
JAXBContext jaxbContext = JAXBContext.newInstance(Person.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
StringWriter writer = new StringWriter();
marshaller.marshal(person, writer);
String xml = writer.toString();
System.out.println(xml);
// 将 XML 反序列化为 Person 对象
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Person person2 = (Person) unmarshaller.unmarshal(new StringReader(xml));
System.out.println(person2.getName());
System.out.println(person2.getAddress().getCity());
}
}
在上面的示例中,Person 类中包含了一个 Address 对象,通过在 Person 类中使用 @XmlElement 注解来告诉 JAXB 序列化和反序列化时如何处理嵌套对象。同时,也需要在 Address 类中使用 @XmlElement 注解来指定 XML 中的元素名。
在序列化时,通过创建 JAXBContext 和 Marshaller 对象来将 Person 对象转换为 XML 字符串。在反序列化时,同样需要创建 JAXBContext 和 Unmarshaller 对象来将 XML 字符串转换为 Person 对象。
注意:
- 使用
@XmlRootElement注解标记根元素类(如 Person 类)。 - 使用
@XmlElement注解标记需要序列化的属性(如 name、address 等)。 - 使用
JAXBContext.newInstance()创建 JAXBContext 对象。 - 使用
jaxbContext.createMarshaller()或jaxbContext.createUnmarshaller()创建 Marshaller 或 Unmarshaller 对象。 - 使用
marshaller.marshal()方法进行序列化,使用unmarshaller.unmarshal()方法进行反序列化。 - 可以使用
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true)设置输出格式化选项。
通过遵循以上步骤,你可以轻松地使用 JAXB 实现嵌套对象的 XML 序列化和反序列化。
原文地址: https://www.cveoy.top/t/topic/mLDf 著作权归作者所有。请勿转载和采集!