2009-11-13 13 views
1

Учитывая List из POJO-х, если я сериализовать их с XStream я получаю:XStream коллекция избегать XML элемент

<list> 
    <pojo> 
    <a>a</a> 
    <b>b</b> 
    </pojo> 
    <pojo> 
    <a>a</a> 
    <b>b</b> 
    </pojo> 
</list> 

Как я могу сделать сериализации и опустить <list> </list> записи? Я использовал addImplicitCollection для аналогичной цели, но это должно было опустить переменную экземпляра коллекции имя, когда коллекция была членом класса, который был сериализован.

Примечание: This вопрос кажется похожим, но не совсем соответствующим (я думаю).

ответ

2

Вы не можете. Представьте, что узел <list> пропал - как бы XStream знал, как десериализовать этот XML? Это может быть список/set/array/something else полностью. Кроме того, представьте, что у вас есть объект, содержащий список ваших pojo, за которым следует одно поле pojo - они будут смешаны вместе.

Это означает, что если у вас нет намерения десериализовать это, вы можете реализовать свой собственный драйвер потока и писатель, сродни JSON writer, который выкинул бы <list> для вас.

+0

Понял, имеет смысл. Благодарю. –

+0

Это уже не так, см. Ответ ниже. –

1

XML должен иметь один корневой элемент, поэтому ChssPly76 прав, но, конечно, если вы потоковываете XML, вы можете просто писать каждое pojo один за другим (иметь смысл и с точки зрения памяти).

Для получения более подробной информации см. http://x-stream.github.io/objectstream.html.

4

В эти дни (с использованием XStream 1.4.1) можно опустить контейнер элемента с выхода с помощью «implicit collections»