如何解决xstream-在自定义转换器中重用默认转换器
| 我正在使用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转换器?
解决方法
这个问题有些陈旧,但是我还是花了一些时间来收集这些数据。
一个简单的解决方案是扩展
ReflectionConverter
而不是实现原始的Converter
接口。 Stream2ѭ是XStream中的默认转换器,因此请覆盖所需的内容,super
其他所有内容。然后,new XStream().register
您的新转换器就可以了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。