Java: сериализация XML коллекции

Каждый раз, когда я искал что-то о том, как сериализовать в XML, я находил сериализаторы бинов. Кажется, что все должно быть объявлено как собственность, которая противоречит моей цели. Я хочу сериализовать сложные иерархии (пока они не дойдут до примитивов, конечно) в XML, начать с (скажем) словаря или списка в качестве родительского объекта.

Какие есть варианты для автоматической сериализации XML?

Я нашел некоторые ссылки на JAXB с 2004 года, это все еще путь?

3 ответа

Решение

Попробуйте библиотеку XStream. Он легко будет сериализовать любую сложную иерархию объектов, которую вы можете использовать.

У меня был большой успех с JAXB, особенно при использовании его поддержки в NetBeans. Я точно знаю, что он поддерживает списки. Я не пробовал это с картами, но я подозреваю, что это работает. Если ничего другого, просто создайте простой bean-компонент, содержащий список, и пусть это будет сериализованный bean-компонент.

Вы можете использовать стандарт java.bean.XMLEncoder / Decoder классы для сериализации коллекций, потому что механизм позволяет вызывать методы через XML. Вывод выглядит примерно так:

<object class="java.util.ArrayList">
  <void method="add">
    <string>Hello</string>
  </void>
  <void method="add">
    <string>World</string>
  </void>
</object>

Конечно, в этом есть недостатки; например, вы не можете легко сериализовать Collections.emptyXXXX() но есть обходные пути. Но поскольку все работает в соответствии с публично поддерживаемым API классов, постоянная форма XML устойчива к изменениям схемы.

Я нашел это очень полезным постоянным механизмом для объектов Java.

Другие вопросы по тегам