Как сериализовать разные объекты, которые реализуют один и тот же интерфейс - PullRequest
0 голосов
/ 21 июня 2019

Я хочу сохранить конфигурацию меню в xml. Итак, я придумал это:

Похоже на механизм папок и файлов. Действие - это простое действие, а ActionGroup состоит как из action, так и actionGroups, но необязательно.

Некоторые правила: 1- Я должен повиноваться, что порядок должен быть соблюден. Вот почему я не могу использовать разные списки для действий и групп действий.

2- Это не правило, но я не хочу ограничивать глубину меню.

Вот классы:

Интерфейс ActionItem:

    public interface ActionItem {
    }

Конкретный класс Действие:

    public class Action implements ActionItem {
        private String id;
    }

Конкретный класс ActionGroup:

    public class ActionGroup implements ActionItem {
        private String id;
        private List<ActionItem> actions;
    }

А Меню класса:

    public class Menu {
        private List<ActionItem> actions;
    }

Но я не могу создать простой xml с этим в XStream. Должен быть способ сказать, что Action - это ActionItem для XStream, но я не смог его найти. На самом деле у меня нет ограничений на инструменты. Если это можно сделать с помощью JAXB, я могу его использовать.

Мне просто нужна простая структура, подобная этой:

<Menu>
    <ActionGroup>
         <Action/>
         <Action/>
         <ActionGroup>
              <Action/>
              <Action/>
              <ActionGroup>
                  <Action/>
                  <Action/>
              </ActionGroup>
         </ActionGroup>
         <Action/>
         <ActionGroup>
              <Action/>
              <Action/>
         </ActionGroup>
    </ActionGroup>
</Menu>

Вот что я получаю с XStream:

<MenuConf>
  <actions>
    <ActionGroup>
      <id>Planning</id>
      <actions>
        <Action>
          <id>/Planning/A</id>
        </Action>
        <Action>
          <id>/Planning/B</id>
        </Action>
        <Action>
          <id>/Planning/C</id>
        </Action>
      </actions>
    </ActionGroup>
  </actions>
</MenuConf>

Есть ли способ избавиться от тегов "action"?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...