XStream 中的自定义转换器

发布于 2024-08-25 00:01:25 字数 732 浏览 8 评论 0原文

我正在使用 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 能给我所需的格式。你能帮我解决这个问题吗?

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

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>

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

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

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

野鹿林 2024-09-01 00:01:25

这是您需要的转换器:

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

}

Here is the converter you need:

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

}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文