Как избежать сериализации нулевых значений с помощью Simple Xml - PullRequest
3 голосов
/ 03 августа 2011

Я пытаюсь сериализовать объект, используя простой 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;
}

Проблема заключается в том, что я создаю новый экземпляр этого класса без идентификатора:

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

и я сериализую его через простой xml:

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

он все равно читает 0 в получающемся xml:

<?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 не является нулевым, поскольку целые числа не могут быть нулевыми, но мне действительно нужно избавиться от этого узла, и я бы предпочел не удалять его вручную.

Любые подсказки кого-нибудь?

1 Ответ

5 голосов
/ 09 августа 2011

Проблема в том, что вы используете примитивные типы (int, char, byte, ...).

В Java вы можете вместо этого использовать примитивные объекты-обертки (Integer, Chat, Byte), чтобы они 'будет рассматриваться как любой другой объект и может быть нулевым.Благодаря 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;
}

И магия!Узел исчез!; -)

...