From ec98cc03a3daf6e574ffafa6e355349cf4f2275f Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 23 Jul 2017 00:18:57 +0800 Subject: [PATCH] bug fixed for issue #1265 --- .../parser/DefaultFieldDeserializer.java | 20 ++++++++++++------- .../{Isse1265.java => Issue1265.java} | 10 +++++++--- 2 files changed, 20 insertions(+), 10 deletions(-) rename src/test/java/com/alibaba/json/bvt/issue_1200/{Isse1265.java => Issue1265.java} (83%) diff --git a/src/main/java/com/alibaba/fastjson/parser/DefaultFieldDeserializer.java b/src/main/java/com/alibaba/fastjson/parser/DefaultFieldDeserializer.java index 59ae6aaff..50e75ca83 100755 --- a/src/main/java/com/alibaba/fastjson/parser/DefaultFieldDeserializer.java +++ b/src/main/java/com/alibaba/fastjson/parser/DefaultFieldDeserializer.java @@ -31,16 +31,22 @@ public class DefaultFieldDeserializer extends FieldDeserializer { @Override public void parseField(DefaultJSONParser parser, Object object, Type objectType, Map fieldValues) { - if (fieldValueDeserilizer == null) { - fieldValueDeserilizer = parser.config.getDeserializer(fieldInfo.fieldClass, fieldInfo.fieldType); - } - - if (objectType instanceof ParameterizedType) { - ParseContext objContext = parser.contex; - objContext.type = objectType; + if (this.fieldValueDeserilizer == null) { + this.fieldValueDeserilizer = parser.config.getDeserializer(fieldInfo.fieldClass, fieldInfo.fieldType); } Type fieldType = fieldInfo.fieldType; + if (objectType instanceof ParameterizedType) { + ParseContext objContext = parser.contex; + + if (objContext != null) { + objContext.type = objectType; + } + + fieldType = FieldInfo.getFieldType(this.clazz, objectType, fieldType); + fieldValueDeserilizer = parser.config.getDeserializer(fieldType); + } + if (fieldType instanceof ParameterizedType && objectType instanceof ParameterizedType) { ParameterizedType fieldParamType = (ParameterizedType) fieldType; diff --git a/src/test/java/com/alibaba/json/bvt/issue_1200/Isse1265.java b/src/test/java/com/alibaba/json/bvt/issue_1200/Issue1265.java similarity index 83% rename from src/test/java/com/alibaba/json/bvt/issue_1200/Isse1265.java rename to src/test/java/com/alibaba/json/bvt/issue_1200/Issue1265.java index 9dce582b6..43611ead8 100644 --- a/src/test/java/com/alibaba/json/bvt/issue_1200/Isse1265.java +++ b/src/test/java/com/alibaba/json/bvt/issue_1200/Issue1265.java @@ -8,16 +8,20 @@ import junit.framework.TestCase; /** * Created by wenshao on 22/07/2017. */ -public class Isse1265 extends TestCase { +public class Issue1265 extends TestCase { public void test_0() throws Exception { + Object t = JSON.parseObject("{\"value\":{\"id\":123}}", new TypeReference(){}).value; + assertEquals(123, ((JSONObject) t).getIntValue("id")); + T1 t1 = JSON.parseObject("{\"value\":{\"id\":123}}", new TypeReference>(){}).value; assertEquals(123, t1.id); + T1 t1_x = JSON.parseObject("{\"value\":{\"id\":123}}", new TypeReference>(){}).value; + assertEquals(123, t1_x.id); + T2 t2 = JSON.parseObject("{\"value\":{\"id\":123}}", new TypeReference>(){}).value; assertEquals(123, t2.id); - Object t = JSON.parseObject("{\"value\":{\"id\":123}}", new TypeReference(){}).value; - assertEquals(123, ((JSONObject) t).getIntValue("id")); } public static class Response {