我需要一个适用于我的类范围的自定义转换器:
class Scope {
private final String name;
private final SomeProp prop;
private final Item[] items;
//...
}
我为 SomeProp 注册了转换器。但我想使用 Item(和所有子类)的默认转换器。
我该怎么做?
我尝试覆盖 marshal/unmarshal:
public void marshal(Object val, HierarchicalStreamWriter writer,
MarshallingContext context) {
//... saving name and prop
writer.startNode("items");
ArrayConverter conv = new ArrayConverter(mapper);
assert(conv.canConvert(items.members.getClass()));
conv.marshal(items.members, writer, context);
writer.endNode);
}
public Object unmarshal(HierarchicalStreamReader reader,
UnmarshallingContext context) {
//... reading name and prop
reader.moveDown();
assert("items".equals(reader.getNodeName()));
ArrayConverter conv = new ArrayConverter(mapper);
Item[] items = (Item[])conv.unmarshal(reader, context);
//...
}
但由于某种原因,解码不起作用。
最佳答案
您的描述不是很清楚,但我认为您正在尝试做比需要的更多的工作。如果您想要 SomeProp 的自定义转换器以及其他所有内容的默认转换器,您所要做的就是
Scope scope = ...;
XStream xstream = new XStream();
xstream.registerConverter(new SomePropConverter());
String xml = xstream.toXML(scope);
如果我遗漏了您问题中的某些内容,请澄清。
关于java - 使用 xstream 的自定义转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7173579/