@Override
 public void marshal(
     Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
   BoardXML boardXML = (BoardXML) source;
   writer.startNode(Constants.TAG_BOARD);
   writer.addAttribute(Constants.ATTRIBUTE_BOARD_PLAYERS, "" + boardXML.getNumberOfPlayers());
   for (Placement placement : boardXML.getCurrentPlacements()) {
     writer.startNode(Constants.TAG_PLACEMENT);
     context.convertAnother(new PlacementXML(placement));
     writer.endNode();
   }
   writer.endNode();
 }
    @Override
    public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {

      reader.moveDown();
      BoardXML boardXML = (BoardXML) context.convertAnother(null, BoardXML.class);
      reader.moveUp();

      reader.moveDown();
      Score score = (Score) context.convertAnother(null, Score.class);
      reader.moveUp();

      List<Tile> playerHand = parsePlayerHand(reader, context);

      TurnXML obj =
          new TurnXML(
              boardXML.getNumberOfPlayers(), boardXML.getCurrentPlacements(), playerHand, score);

      return obj;
    }