Xml xstream反序列化问题
正在尝试反序列化以下XML,其中“day”和“fulldob”是对象 类型及其各自的转换器用于自定义逻辑。反序列化一次&当 方法应用于对象,则缺少“day”和“fulldob”的值。也就是说,day和fulldob未正确反序列化。有人能帮忙吗 ************输入XML********* 这是“fulldob”的对象 这是“day”的对象Xml xstream反序列化问题,xml,xstream,xml-deserialization,Xml,Xstream,Xml Deserialization,正在尝试反序列化以下XML,其中“day”和“fulldob”是对象 类型及其各自的转换器用于自定义逻辑。反序列化一次&当 方法应用于对象,则缺少“day”和“fulldob”的值。也就是说,day和fulldob未正确反序列化。有人能帮忙吗 ************输入XML********* 这是“fulldob”的对象 这是“day”的对象 谢谢,以下是DOBDayConverter代码: public class DOBDayConverter extends Reflection
谢谢,以下是DOBDayConverter代码:
public class DOBDayConverter extends ReflectionConverter {
public DOBDayConverter(XStream xstream) {
super(xstream.getMapper(), xstream.getReflectionProvider());
}
@Override
public void marshal(Object obj, HierarchicalStreamWriter writer, MarshallingContext context) {
DOBDay d = (DOBDay) obj;
try {
writer.setValue(d.getDay());
} catch (Exception e) {
}
}
@Override
public Object unmarshal(HierarchicalStreamReader reader,UnmarshallingContext context) {
DOBDay day = new DOBDay();
day.setDay(reader.getValue());
return day;
}
@SuppressWarnings("rawtypes")
@Override
public boolean canConvert(Class clazz) {
return clazz.equals(DOBDay.class);
}
}
public class FullDOBConverter extends ReflectionConverter {
public FullDOBConverter(XStream xstream) {
super(xstream.getMapper(), xstream.getReflectionProvider());
}
@Override
public void marshal(Object obj, HierarchicalStreamWriter writer, MarshallingContext context) {
FullDOB fd = (FullDOB) obj;
try {
writer.setValue(fd.getFullDOB());
} catch (Exception e) {
}
}
@Override
public Object unmarshal(HierarchicalStreamReader reader,UnmarshallingContext context) {
FullDOB fd = new FullDOB();
fd.setFullDOB(reader.getValue());
return fd;
}
@SuppressWarnings("rawtypes")
@Override
public boolean canConvert(Class clazz) {
return clazz.equals(FullDOB.class);
}
}
以下是FullDOBConverter代码:
public class DOBDayConverter extends ReflectionConverter {
public DOBDayConverter(XStream xstream) {
super(xstream.getMapper(), xstream.getReflectionProvider());
}
@Override
public void marshal(Object obj, HierarchicalStreamWriter writer, MarshallingContext context) {
DOBDay d = (DOBDay) obj;
try {
writer.setValue(d.getDay());
} catch (Exception e) {
}
}
@Override
public Object unmarshal(HierarchicalStreamReader reader,UnmarshallingContext context) {
DOBDay day = new DOBDay();
day.setDay(reader.getValue());
return day;
}
@SuppressWarnings("rawtypes")
@Override
public boolean canConvert(Class clazz) {
return clazz.equals(DOBDay.class);
}
}
public class FullDOBConverter extends ReflectionConverter {
public FullDOBConverter(XStream xstream) {
super(xstream.getMapper(), xstream.getReflectionProvider());
}
@Override
public void marshal(Object obj, HierarchicalStreamWriter writer, MarshallingContext context) {
FullDOB fd = (FullDOB) obj;
try {
writer.setValue(fd.getFullDOB());
} catch (Exception e) {
}
}
@Override
public Object unmarshal(HierarchicalStreamReader reader,UnmarshallingContext context) {
FullDOB fd = new FullDOB();
fd.setFullDOB(reader.getValue());
return fd;
}
@SuppressWarnings("rawtypes")
@Override
public boolean canConvert(Class clazz) {
return clazz.equals(FullDOB.class);
}
}
不要忘记注册转换器并处理注释:
XStream xs = new XStream();
xs.processAnnotations(DOBData.class);
xs.processAnnotations(FullDOB.class);
xs.processAnnotations(DOBDay.class);
xs.registerConverter(new DOBDayConverter(xs));
xs.registerConverter(new FullDOBConverter(xs));
public class DOBDayConverter extends ReflectionConverter {
public DOBDayConverter(XStream xstream) {
super(xstream.getMapper(), xstream.getReflectionProvider());
}
@Override
public void marshal(Object obj, HierarchicalStreamWriter writer, MarshallingContext context) {
DOBDay d = (DOBDay) obj;
try {
writer.setValue(d.getDay());
} catch (Exception e) {
}
}
@Override
public Object unmarshal(HierarchicalStreamReader reader,UnmarshallingContext context) {
DOBDay day = new DOBDay();
day.setDay(reader.getValue());
return day;
}
@SuppressWarnings("rawtypes")
@Override
public boolean canConvert(Class clazz) {
return clazz.equals(DOBDay.class);
}
}
public class FullDOBConverter extends ReflectionConverter {
public FullDOBConverter(XStream xstream) {
super(xstream.getMapper(), xstream.getReflectionProvider());
}
@Override
public void marshal(Object obj, HierarchicalStreamWriter writer, MarshallingContext context) {
FullDOB fd = (FullDOB) obj;
try {
writer.setValue(fd.getFullDOB());
} catch (Exception e) {
}
}
@Override
public Object unmarshal(HierarchicalStreamReader reader,UnmarshallingContext context) {
FullDOB fd = new FullDOB();
fd.setFullDOB(reader.getValue());
return fd;
}
@SuppressWarnings("rawtypes")
@Override
public boolean canConvert(Class clazz) {
return clazz.equals(FullDOB.class);
}
}
XStream xs = new XStream();
xs.processAnnotations(DOBData.class);
xs.processAnnotations(FullDOB.class);
xs.processAnnotations(DOBDay.class);
xs.registerConverter(new DOBDayConverter(xs));
xs.registerConverter(new FullDOBConverter(xs));