content: package data.media.writeAsArray;
  
  import java.lang.reflect.Type;
  import java.util.ArrayList;
  import java.util.List;
  
  import com.alibaba.fastjson.JSONException;
  import com.alibaba.fastjson.parser.DefaultJSONParser;
  import com.alibaba.fastjson.parser.JSONLexer;
  import com.alibaba.fastjson.parser.JSONToken;
  import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;
  
  import data.media.Media;
  import data.media.Media.Player;
  
  public class MediaDeserializer implements ObjectDeserializer {
  
      @SuppressWarnings("unchecked")
      public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
          final JSONLexer lexer = parser.getLexer();
  
          if (lexer.token() != JSONToken.LBRACKET) {
              throw new JSONException("error");
          }
  
          Media media = new Media();
  
          int bitrate = lexer.scanInt(',');
          int height = lexer.scanInt(',');
          int width = lexer.scanInt(',');
          String copyright = lexer.scanString(',');
          long duration = lexer.scanLong(',');
          String format = lexer.scanString(',');
  
          List<String> persons = new ArrayList<String>();
          lexer.scanStringArray(persons, ',');
  
          String playerName = lexer.scanSymbolWithSeperator(parser.getSymbolTable(), ',');
          long size = lexer.scanLong(',');
          String title = lexer.scanString(',');
          String uri = lexer.scanString(']');
  
          lexer.nextToken(JSONToken.COMMA);
  
          media.setBitrate(bitrate);
          media.setHeight(height);
          media.setWidth(width);
          media.setCopyright(copyright);
          media.setDuration(duration);
          media.setFormat(format);
          media.setPersons(persons);
          media.setPlayer(playerName == null ? null : Player.valueOf(playerName));
          media.setSize(size);
          media.setTitle(title);
          media.setUri(uri);
  
          return (T) media;
  
      }
  
      public int getFastMatchToken() {
          return JSONToken.LBRACKET;
      }
  
  }
  