2010-03-16 64 views
3

我正在使用XStream将我的对象序列化为XML格式。我得到的格式化的XML如下所示:node1,node2,node 3是pojo的属性,DetailDollarsXStream中的自定义转换器

我有要求在哪里我需要calucluate百分比,例如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会得到我想要的格式。你能帮我解决这个问题吗?

回答

4

以下是你需要转换器:

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

}

+0

感谢萌芽状态。这工作。 – 2011-10-07 20:50:48

+0

不客气! – pablosaraiva 2011-10-07 20:55:46