gpt4 book ai didi

java - 如何使用 JAXB 序列化和反序列化对象?

转载 作者:IT老高 更新时间:2023-10-28 20:51:07 35 4
gpt4 key购买 nike

我有一个问题。我想使用 JAXB 将一个对象转换为另一个对象。如,我有一个类 com.home.Student 和另一个类 com.school.Student,两者都有相同的参数,实际上两者都是相同的(复制粘贴) ,但不同的包装。我想使用 JAXB 执行它们之间的转换。

如何做到这一点,请帮助我。

最佳答案

如果您包含一些解释您的问题的代码,那就太好了。

JAXB 101 说你应该放置正确的注解,然后你才能正确地序列化和反序列化。你应该用 @XmlRootElement 正确地注释你的类。 , @XmlElement , @XmlAttribute

例如:

@XmlRootElement(name="student")
@XmlAccessorType(XmlAccessType.NONE)
class Student {
@XmlElement(name="name")
private String name;

@XmlElement(name="age")
private int age;

public Student() {
}

public String getName() { return name; }

public int getAge() { return age; }
}

然后你可以使用 JAXB 序列化它 Marshaller :

StringWriter writer = new StringWriter();
JAXBContext context = JAXBContext.newInstance(Student.class);
Marshaller m = context.createMarshaller();
m.marshal(student, writer);

并通过 Unmarshelling 反序列化它输入..

JAXBContext context = JAXBContext.newInstance(Student.class);
Unmarshaller m = context.createUnmarshaller();
return (Student)m.unmarshal(new StringReader(input));

请务必查看我上面提到的 JavaDoc,因为有很多方法可以做到这一点。

如果你不能修改你的类,你仍然可以使用 JAXB(或者你可以使用 XStream)假设你的类如下:

class Student {
private String name;
private int age;

public Student() {
}

public void setName(String name) { this.name = name; }
public String getName() { return name; }
public void setAge(int age) { this.age = age; }
public int getAge() { return age; }
}

您可以通过以下方式对其进行序列化:

Student student = new Student();
student.setAge(25);
student.setName('FooBar');
StringWriter writer = new StringWriter();
JAXBContext context = JAXBContext.newInstance(Student.class);
Marshaller m = context.createMarshaller();
m.marshal(new JAXBElement(new QName(Student.class.getSimpleName()), Student.class, student), writer);
System.out.println(writer.toString());

如果您使用 XStream ,您也可以在没有注释的情况下进行序列化(并且更可控)。 http://x-stream.github.io/tutorial.html

关于java - 如何使用 JAXB 序列化和反序列化对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5189690/

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