java – XStream序列化空值
发布时间:2020-05-24 23:50:56 所属栏目:Java 来源:互联网
导读:假设我有 class Student{String name;int age;String teacher;} 然后 : public class App1{ public static void main(String[] args) { Student st = new Student(); st.setName(toto)
|
假设我有 class Student
{
String name;
int age;
String teacher;
}
然后 : 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));
}
} 给我 : <student> <name>toto</name> <age>0</age> </student> 有没有办法处理空值?我的意思是 : <student> <name>toto</name> <age>0</age> <teacher></teacher> </student> 如果我这样做可能 st.setTeacher("");
但如果老师是空的,那就没有. 我尝试使用自定义转换器,但似乎空值不会发送到转换器. 解决方法我正在使用XStream 1.4.7,@ XStreamAlias注释用于自定义字段名称,@ XStreamConverter用于自定义转换器(用于表示日期和其他自定义bean).但是,甚至没有调用空值的自定义转换器.我的目标是序列化对象的所有字段,包括null字段,我不需要解组XML. 我设法通过创建自定义ReflectionConverter来做到这一点. new Object() {
{
for (Iterator fieldIter = fields.iterator(); fieldIter.hasNext();) {
FieldInfo info = (FieldInfo) fieldIter.next();
if (info.value != null) {
//leave the code unchanged
...
} else {
//add this to write null info.value to xml
Log.info("MyCustomReflectionConverter -> serialize null field: " + info.fieldName);
writeField(info.fieldName,null,info.type,info.definedIn,info.value);
}
}
//... leave the rest of the code unchanged
}
};
之后,我创建了类似的xStream实例(以非常低的优先级注册转换器非常重要): StaxDriver driver = new StaxDriver(new NoNameCoder()) {
@Override
public StaxWriter createStaxWriter(XMLStreamWriter out) throws XMLStreamException {
// the boolean parameter controls the production of XML declaration
return createStaxWriter(out,false);
}
};
XStream xStream = new XStream(driver);
xStream.autodetectAnnotations(true);//needed to process aliases
//register MyCustomReflectionConverter
MyCustomReflectionConverter reflectionConverter = new MyCustomReflectionConverter (xStream.getMapper(),new SunUnsafeReflectionProvider());
xStream.registerConverter(reflectionConverter,XStream.PRIORITY_VERY_LOW);
感谢Mark Nabours的解决方案here 希望能帮助到你.有人找到了更好的解决方案吗? (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
