XStream избежать сбора xml-элемента

Учитывая List POJO, если я сериализую их с помощью XStream, я получаю:

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

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

Примечание. Этот вопрос выглядит похожим, но не совсем актуальным (я думаю).


person Marcus Leon    schedule 13.11.2009    source источник


Ответы (3)


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

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

person ChssPly76    schedule 13.11.2009
comment
Понятно, имеет смысл. Спасибо. - person Marcus Leon; 14.11.2009
comment
Это уже неверно, см. Ответ ниже. - person Urs Reupke; 14.09.2011

В наши дни (используя XStream 1.4.1) можно опустить элемент контейнера из вывода, используя "неявные коллекции "

person Urs Reupke    schedule 14.09.2011

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

Подробнее см. http://x-stream.github.io/objectstream.html. .

person Christopher Oezbek    schedule 23.02.2010