【发布时间】:2011-05-24 08:54:37
【问题描述】:
我正在使用 xstream 处理 xml 字符串,但对象的某些字段在版本之间发生了变化,所以我正在实现 自定义转换器。下面列出了字段更改的摘要,只有前两种字段类型不同。
Field type1 type2
a short String
b String Object
c List List
d Object Object
.
.
.
x String String
我当前的转换器被实现为专门处理每个字段,这导致 unmarshal() 方法中出现大量“else if”条件
package a.b.c.reports;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
public class MyConverter implements Converter {
..
@Override
public Object unmarshal(HierarchicalStreamReader reader,UnmarshallingContext context) {
while (reader.hasMoreChildren()) {
reader.moveDown();
if(reader.getNodeName().equals("a"))
{
a = reader.getValue();
}
else if (reader.getNodeName().equals("b"))
{
b = (Object) context.convertAnother(reader, Object.class);
}
else if(reader.getNodeName().equals("c"))
{
a = reader.getValue();
}
..
..
}
}
有没有更聪明的方法可以将未更改类型的字段的处理委托给默认的 xstream 转换器?
【问题讨论】: