如何避免使用Simple Xml序列化零值

时间:2011-08-03 19:37:44

标签: java serialization simple-framework

我正在尝试使用简单的xml(http://simple.sourceforge.net/)序列化一个对象。对象设置非常简单:

@Root(name = "order_history")
public class OrderHistory {

    @Element(name = "id", required = false)
    public int ID;

    @Element(name = "id_order_state")
    public int StateID;

    @Element(name = "id_order")
    public int OrderID;
}

问题是当我创建没有ID的此类的新实例时:

OrderHistory newhistory = new OrderHistory();
newhistory.OrderID = _orderid;
newhistory.StateID = _stateid;

我通过简单的xml序列化它:

StringWriter xml = new StringWriter();
Serializer serializer = new Persister();
serializer.write(newhistory, xml);

在结果xml中它仍然读为0:

<?xml version='1.0' encoding='UTF-8'?>
<order_history>
    <id>0</id>
    <id_order>2</id_order>
    <id_order_state>8</id_order_state>
</order_history>

我猜这是因为ID属性不为null,因为整数不能为null。但我真的需要摆脱这个节点,我宁愿不要手动删除它。

有人提出任何线索吗?

1 个答案:

答案 0 :(得分:5)

这里的'问题'是你使用原始类型(int,char,byte,...)。

在Java中,您可以使用原始包装器对象(Integer,Chat,Byte),因此它们将被视为任何其他对象,并且可以为null。感谢autoboxing,您可以将基元分配给它们的对象变体。

所以我建议改变你的模型如下:

@Root(name = "order_history")
public class OrderHistory {

    @Element(name = "id", required = false)
    public Integer ID;

    @Element(name = "id_order_state")
    public Integer StateID;

    @Element(name = "id_order")
    public Integer OrderID;
}

魔法!节点消失了! ; - )