java - 使用 xstream 的自定义转换器

标签 java converters xstream

我需要一个适用于我的类范围的自定义转换器:

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/

相关文章:

java - 为什么 SurfaceView 没有合适的构造函数?

java - 使用 OpenCSV 将 CSV 文件转换为 XML(使用输入中的字节数组)

java - XStream 如何选择其转换器?

java - Xstream 列表 - 重复字段

java - org.objectweb.asm.ClassReader.readInt 中的 Jersey REST 异常 java.lang.ArrayIndexOutOfBoundsException

java - org.jsoup.select.Selector$SelectorParseException : Could not parse query '' : unexpected token at ''

java - 在java中创建指定名称的临时文件

java - 将Python(django)实体类转换为Java的好方法

jsf - 为什么 selectOneMenu 将 ItemLabel 发送到转换器?

java - xstream 使用 Converter 将复杂的 XML 反序列化为更简单的 java