首先,您的问题实际上是两个不相关的问题,我会尽力回答它们。
转换器
关于日期转换的第二个问题。在我看来,这似乎就是你在这里的原因。
添加自己的转换器的基本方法相当简单,该方法registerConverter
应该会给您一个线索。如果您想知道如何实现,Converter
我建议您查看 XStream 已经提供的众多转换器之一。另外,我觉得我必须提到转换器的优先级。
可以使用明确的优先级注册转换器。默认情况下,它们使用 XStream.PRIORITY_NORMAL 注册。相同优先级的转换器将按其注册的相反顺序使用。默认转换器,即如果没有其他已注册的转换器适用时将使用的转换器,可以使用优先级 XStream.PRIORITY_VERY_LOW 进行注册。XStream 默认使用 ReflectionConverter 作为后备转换器。
换句话说,给定两个接受相同类的转换器,将使用最后添加的那个。
转换器查找
要回答如何使用您ConverterLookup
的方法,有两种方法可能会产生相同的结果,我个人会选择替代方法 2。
1)覆盖getConverterLookup
XStream xs = new XStream(){
@Override
public ConverterLookup getConverterLookup() {
return new ConverterLookup() {
public Converter lookupConverterForType(Class type) {
//Do your magic here
}
};
}
};
2)使用Mapper
在这种情况下,我会为我的新映射保留DefaultMapper
并实现's。MapperWrapper
(查看buildMapper
内部XStream.java
以查看一些默认值)像这样初始化:
ClassLoader classLoader = new ClassLoaderReference(new CompositeClassLoader());
Mapper mapper = new DefaultMapper(classLoader);
mapper = new MyOwnMapperWrapper(mapper);
XStream xs = new XStream(null, mapper, new XppDriver());