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

https://bitbucket.org/xiejuntao/xdesktop · Java · 48 lines · 39 code · 9 blank · 0 comment · 10 complexity · 56477de6d4565682820c940c772c4187 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.DefaultJSONParser.ResolveTask;
  6. import com.alibaba.fastjson.parser.JSONToken;
  7. import com.alibaba.fastjson.parser.ParserConfig;
  8. import com.alibaba.fastjson.util.FieldInfo;
  9. public class DefaultFieldDeserializer extends FieldDeserializer {
  10. private ObjectDeserializer fieldValueDeserilizer;
  11. public DefaultFieldDeserializer(ParserConfig mapping, Class<?> clazz, FieldInfo fieldInfo){
  12. super(clazz, fieldInfo);
  13. }
  14. @Override
  15. public void parseField(DefaultJSONParser parser, Object object, Type objectType, Map<String, Object> fieldValues) {
  16. if (fieldValueDeserilizer == null) {
  17. fieldValueDeserilizer = parser.getConfig().getDeserializer(fieldInfo);
  18. }
  19. Object value = fieldValueDeserilizer.deserialze(parser, getFieldType(), fieldInfo.getName());
  20. if (parser.getResolveStatus() == DefaultJSONParser.NeedToResolve) {
  21. ResolveTask task = parser.getLastResolveTask();
  22. task.setFieldDeserializer(this);
  23. task.setOwnerContext(parser.getContext());
  24. parser.setResolveStatus(DefaultJSONParser.NONE);
  25. } else {
  26. if (object == null) {
  27. fieldValues.put(fieldInfo.getName(), value);
  28. } else {
  29. setValue(object, value);
  30. }
  31. }
  32. }
  33. public int getFastMatchToken() {
  34. if (fieldValueDeserilizer != null) {
  35. return fieldValueDeserilizer.getFastMatchToken();
  36. }
  37. return JSONToken.LITERAL_INT;
  38. }
  39. }