/src/test/java/com/alibaba/json/bvt/annotation/DeserializeUsingTest.java

https://github.com/alibaba/fastjson · Java · 71 lines · 53 code · 15 blank · 3 comment · 3 complexity · 3a7cd8b78821f58c105438c3f3b3c228 MD5 · raw file

  1. package com.alibaba.json.bvt.annotation;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.annotation.JSONField;
  4. import com.alibaba.fastjson.parser.DefaultJSONParser;
  5. import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;
  6. import junit.framework.TestCase;
  7. import java.lang.reflect.Type;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10. /**
  11. * Created by wenshao on 16/9/25.
  12. */
  13. public class DeserializeUsingTest extends TestCase {
  14. public void test_deserializeUsing() throws Exception {
  15. String jsonStr = "{'subjectList':['CHINESE','MATH']}";
  16. Teacher teacher = JSON.parseObject(jsonStr, Teacher.class);
  17. assertEquals(SubjectEnum.CHINESE.ordinal(), teacher.getSubjectList().get(0).intValue());
  18. assertEquals(SubjectEnum.MATH.ordinal(), teacher.getSubjectList().get(1).intValue());
  19. }
  20. public void test_deserializeUsing2() throws Exception {
  21. String jsonStr = "{'subjectList':['CHINESE','MATH']}";
  22. Teacher teacher = JSON.parseObject(jsonStr).toJavaObject(Teacher.class);
  23. assertEquals(SubjectEnum.CHINESE.ordinal(), teacher.getSubjectList().get(0).intValue());
  24. assertEquals(SubjectEnum.MATH.ordinal(), teacher.getSubjectList().get(1).intValue());
  25. }
  26. public static class Teacher {
  27. @JSONField(deserializeUsing = SubjectListDeserializer.class)
  28. private List<Integer> subjectList;
  29. public List<Integer> getSubjectList() {
  30. return subjectList;
  31. }
  32. public void setSubjectList(List<Integer> subjectList) {
  33. this.subjectList = subjectList;
  34. }
  35. }
  36. public static class SubjectListDeserializer implements ObjectDeserializer {
  37. @SuppressWarnings("unchecked")
  38. public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
  39. List<String> parseObjectList = parser.parseArray(String.class);
  40. if(parseObjectList != null) {
  41. List<Integer> resultVoList = new ArrayList<Integer>();
  42. for(String parseObject : parseObjectList) {
  43. resultVoList.add(SubjectEnum.valueOf(parseObject).ordinal());
  44. }
  45. return (T)resultVoList;
  46. }
  47. throw new IllegalStateException();
  48. }
  49. public int getFastMatchToken() {
  50. return 0;
  51. }
  52. }
  53. public static enum SubjectEnum {
  54. CHINESE, MATH
  55. }
  56. }