twe*_*sat 7 java serialization xstream
假设我有
class Student
{
String name;
int age;
String teacher;
}
Run Code Online (Sandbox Code Playgroud)
然后 :
public class App1
{
public static void main(String[] args)
{
Student st = new Student();
st.setName("toto");
XStream xs = new XStream();
xs.alias("student",Student.class);
System.out.println(xs.toXML(st));
}
Run Code Online (Sandbox Code Playgroud)
}
给我 :
<student>
<name>toto</name>
<age>0</age>
</student>
Run Code Online (Sandbox Code Playgroud)
有没有办法处理空值?我的意思是 :
<student>
<name>toto</name>
<age>0</age>
<teacher></teacher>
</student>
Run Code Online (Sandbox Code Playgroud)
如果我这样做是可能的
st.setTeacher("");
Run Code Online (Sandbox Code Playgroud)
但如果老师是空的,那就不行了
我尝试使用自定义转换器,但似乎空值不会发送到转换器.
首先在类中提供 getter 和 setter 方法,Student如下所示:
public class Student{
String name;
int age;
String teacher;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
.......
......//Like that mention other getter and setter method
}
Run Code Online (Sandbox Code Playgroud)
现在,您需要创建转换器类,如下所示:
public class StudentConverter implements Converter{
public boolean canConvert(Class clazz) {
return clazz.equals(Test.class);
}
public void marshal(Object value, HierarchicalStreamWriter writer,
MarshallingContext context) {
Student student = (Student ) value;
writer.startNode("name");
writer.setValue(test.getName());
writer.endNode();
writer.startNode("age");
writer.setValue(test.getAge());
writer.endNode();
writer.startNode("teacher");
writer.setValue("");
writer.endNode();
}
public Object unmarshal(HierarchicalStreamReader reader,
UnmarshallingContext context) {
Student student = new Student();
test.setName(reader.getNodeName());
test.setAge(reader.getNodeName());
test.setTeacher(reader.getNodeName());
return student;
}
}
Your main class will the like that:
public class App1{
public static void main(String args[]) {
XStream stream = new XStream(new StaxDriver());
Student st = new Student();
st.setName("ABC");
t.setAge(21);
stream.registerConverter(new StudentConverter());
stream.alias("student", Student.class);
System.out.println(stream.toXML(st));
}
}
Run Code Online (Sandbox Code Playgroud)
希望这是您的答案....快乐学习:)