package com.alibaba.json.bvt.annotation; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.parser.DefaultJSONParser; import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer; import junit.framework.TestCase; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; /** * Created by wenshao on 16/9/25. */ public class DeserializeUsingTest extends TestCase { public void test_deserializeUsing() throws Exception { String jsonStr = "{'subjectList':['CHINESE','MATH']}"; Teacher teacher = JSON.parseObject(jsonStr, Teacher.class); assertEquals(SubjectEnum.CHINESE.ordinal(), teacher.getSubjectList().get(0).intValue()); assertEquals(SubjectEnum.MATH.ordinal(), teacher.getSubjectList().get(1).intValue()); } public static class Teacher { @JSONField(deserializeUsing = SubjectListDeserializer.class) private List<Integer> subjectList; public List<Integer> getSubjectList() { return subjectList; } public void setSubjectList(List<Integer> subjectList) { this.subjectList = subjectList; } } public static class SubjectListDeserializer implements ObjectDeserializer { @SuppressWarnings("unchecked") public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) { List<String> parseObjectList = parser.parseArray(String.class); if(parseObjectList != null) { List<Integer> resultVoList = new ArrayList<Integer>(); for(String parseObject : parseObjectList) { resultVoList.add(SubjectEnum.valueOf(parseObject).ordinal()); } return (T)resultVoList; } throw new IllegalStateException(); } public int getFastMatchToken() { return 0; } } public static enum SubjectEnum { CHINESE, MATH } }