2011-08-03 14 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のプロパティがnullではないという理由が推測されています。なぜなら、整数はnullにはならないからです。しかし、私は本当にこのノードを取り除く必要があります、私はむしろそれを手動で削除したいと思います。

誰にも手掛かりがありますか?

+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

私は自分自身を考えないために自分を叩くべきです... –

関連する問題