創建寫出地圖上,倒在使用反射器編組對象轉換器:
static class MyConverter implements Converter {
private final Map<String, String> attributes;
private final Class<?> clazz;
private final Mapper mapper;
private final ReflectionProvider reflectionProvider;
public MyConverter(Mapper mapper,
ReflectionProvider reflectionProvider, Class<?> clazz,
Map<String, String> attributes) {
super();
this.mapper = mapper;
this.reflectionProvider = reflectionProvider;
this.attributes = attributes;
this.clazz = clazz;
}
@Override
public boolean canConvert(Class cls) {
return cls == clazz;
}
@Override
public void marshal(Object value, HierarchicalStreamWriter writer,
MarshallingContext context) {
for (String key : attributes.keySet()) {
writer.addAttribute(key, attributes.get(key));
}
Converter converter = new ReflectionConverter(mapper,
reflectionProvider);
context.convertAnother(p, converter);
}
@Override
public Object unmarshal(HierarchicalStreamReader arg0,
UnmarshallingContext arg1) {
// TODO Auto-generated method stub
return null;
}
}
從XStream的實例檢索映射和ReflectionProvider情況下,並註冊一個轉換器所有必要的設置:
XStream xs = new XStream(new DomDriver());
Mapper mapper = xs.getMapper();
ReflectionProvider reflectionProvider = xs.getReflectionProvider();
xs.alias("youralias", YourRoot.class);
xs.registerConverter(new MyConverter(mapper, reflectionProvider,
YourRoot.class, map));
System.out.println(xs.toXML(yourRoot));
是否有可能從註釋中檢索XStream實例? –
嗨,請你說明一下'unmarshal()'方法的實現嗎?我遇到同樣的問題,我相信這會有很大的幫助。 (也許你可以檢查http://stackoverflow.com/questions/17086757/how-to-unmarshal-map-using-xstream) – carlspring
context.convertAnother(p,converter);什麼是「p」? –