converter - XStream 中的自定义转换器

标签 converter xstream

我正在使用 XStream 将我的对象序列化为 XML 格式。我得到的格式化xml如下: node1, node2, node 3 是pojo的属性,DetailDollars

我有一个要求,我必须计算一个百分比,例如 100/25,并将新节点添加到现有节点。所以,最终的输出应该是:

<DetailDollars>
    <node1>100 </node1> 
    <node2>25</node2> 
    <node3>10</node3> 
</DetailDollars>

我编写了一个自定义转换器并注册到我的 xstream 对象。

public void marshal(..){
         writer.startNode("node4");         
         writer.setValue(getNode1()/ getnode2() );
         writer.endNode();
}

但是,我得到的 xml 流只有新节点:

<DetailDollars> 
    <node4>4</node4>
</DetailDollars>

我不确定哪个 xstream api 会为我提供所需的格式。你能帮我解决这个问题吗?

最佳答案

这是您需要的转换器:

public class DetailDollarsConverter extends ReflectionConverter {

public DetailDollarsConverter(Mapper mapper,
        ReflectionProvider reflectionProvider) {
    super(mapper, reflectionProvider);
}

@Override
public void marshal(Object obj, HierarchicalStreamWriter writer,
        MarshallingContext context) {
    super.marshal(obj,writer,context);

    DetailDollars dl = (DetailDollars) obj;

    writer.startNode("node4");
    writer.setValue(Double.toString(dl.getNode1() / dl.getNode2()));
    writer.endNode();
}

@Override
public Object unmarshal(HierarchicalStreamReader reader,
        UnmarshallingContext context) {
    return super.unmarshal(reader,context);
}

@SuppressWarnings("unchecked")
@Override
public boolean canConvert(Class clazz) {
    return clazz.equals(DetailDollars.class);
}

关于converter - XStream 中的自定义转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2456909/

相关文章:

java - 格式化 Xstream 生成的 XML

java - Xstream 驱动程序性能

java - XStream:在我解析时折叠 XML 层次结构

php - 将类 stdClass 的对象转换为 JSON 对象

jsf - 反对具有静态 WeakHashMap 的通用 JSF 对象转换器的参数

c# - 如何手动更新多重绑定(bind)

java - XStream 不会调用 readObject()

date - 如何解决 "Conversion Error setting value ' 2013-10-2 6' for ' null Converter'"in h :inputText with Date value?

wpf - 将超过 1 个参数传递给转换器

java - 有没有办法将版本号放入 XStream 生成的 XML 中?