XStream中的自定义转换器 [英] custom converter in XStream

查看:447
本文介绍了XStream中的自定义转换器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am using XStream to serialize my Objects to XML format. The formatted xml that I get is as below: node1, node2, node 3 are attributes of pojo,DetailDollars

我有一个要求,我必须在其中计算一个百分比,对于例如100/25,并将新节点添加到现有节点。因此,最终输出应为:

I have requirement where in I have to calucluate a percentage, for example 100/ 25 and add the new node to the existing ones. So, the final output should be :

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

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

I wrote a custom converter and registered to my xstream object.

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

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

But, the xml stream I get has only the new node:

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

我不确定哪个xstream api会为我提供所需的格式。

I am not sure which xstream api would get me the desired format. could you please help me with this .

推荐答案

这是您需要的转换器:

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);
}

}

这篇关于XStream中的自定义转换器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆