/src/main/java/com/alibaba/fastjson/parser/deserializer/LongFieldDeserializer.java

https://bitbucket.org/xiejuntao/xdesktop · Java · 62 lines · 48 code · 13 blank · 1 comment · 16 complexity · d0a4e4659cc88571bf51bdcc075f233b MD5 · raw file

  1. package com.alibaba.fastjson.parser.deserializer;
  2. import java.lang.reflect.Type;
  3. import java.util.Map;
  4. import com.alibaba.fastjson.parser.DefaultJSONParser;
  5. import com.alibaba.fastjson.parser.JSONLexer;
  6. import com.alibaba.fastjson.parser.JSONToken;
  7. import com.alibaba.fastjson.parser.ParserConfig;
  8. import com.alibaba.fastjson.util.FieldInfo;
  9. import com.alibaba.fastjson.util.TypeUtils;
  10. public class LongFieldDeserializer extends FieldDeserializer {
  11. private final ObjectDeserializer fieldValueDeserilizer;
  12. public LongFieldDeserializer(ParserConfig mapping, Class<?> clazz, FieldInfo fieldInfo){
  13. super(clazz, fieldInfo);
  14. fieldValueDeserilizer = mapping.getDeserializer(fieldInfo);
  15. }
  16. @Override
  17. public void parseField(DefaultJSONParser parser, Object object, Type objectType, Map<String, Object> fieldValues) {
  18. Long value;
  19. final JSONLexer lexer = parser.getLexer();
  20. if (lexer.token() == JSONToken.LITERAL_INT) {
  21. long val = lexer.longValue();
  22. lexer.nextToken(JSONToken.COMMA);
  23. if (object == null) {
  24. fieldValues.put(fieldInfo.getName(), val);
  25. } else {
  26. setValue(object, val);
  27. }
  28. return;
  29. } else if (lexer.token() == JSONToken.NULL) {
  30. value = null;
  31. lexer.nextToken(JSONToken.COMMA);
  32. } else {
  33. Object obj = parser.parse();
  34. value = TypeUtils.castToLong(obj);
  35. }
  36. if (value == null && getFieldClass() == long.class) {
  37. // skip
  38. return;
  39. }
  40. if (object == null) {
  41. fieldValues.put(fieldInfo.getName(), value);
  42. } else {
  43. setValue(object, value);
  44. }
  45. }
  46. public int getFastMatchToken() {
  47. return fieldValueDeserilizer.getFastMatchToken();
  48. }
  49. }