3

単純な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>

これは、整数をnullにすることはできないため、IDプロパティがnullではないためだと思います。しかし、私は本当にこのノードを取り除く必要があり、手動で削除したくありません。

誰か手がかりはありますか?

4

1 に答える 1

6

ここでの「問題」は、プリミティブ型(int、char、byte、...)を使用していることです。

Javaでは、代わりにプリミティブラッパーオブジェクト(整数、チャット、バイト)を使用できるため、他のオブジェクトと同じように扱われ、nullにすることができます。オートボクシングのおかげで、プリミティブをオブジェクトバリアントに割り当てることができます。

したがって、次のようにモデルを変更することをお勧めします。

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

そして魔法!ノードが消えました!;-)

于 2011-08-08T21:06:22.687 に答える