2011-08-03 86 views
3

我想使用簡單的xml(http://simple.sourceforge.net/)來序列化一個對象。對象的設置是相當簡單:如何避免使用Simple Xml序列化零值

@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屬性不爲空,因爲整數不能爲空。但我真的需要擺脫這個節點,我寧願不手動刪除它。

任何線索有人嗎?

+0

你應該更早地發佈你的問題! ;-) –

回答

4

這裏的'問題'是你使用原始類型(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; 
} 

和魔法!節點消失了! ;-)

+0

我應該爲自己沒有想到這個而打耳光...... –