diff --git a/src/main/java/com/alibaba/fastjson/parser/JavaBeanInfo.java b/src/main/java/com/alibaba/fastjson/parser/JavaBeanInfo.java index 8228e8ecc..f9590665a 100755 --- a/src/main/java/com/alibaba/fastjson/parser/JavaBeanInfo.java +++ b/src/main/java/com/alibaba/fastjson/parser/JavaBeanInfo.java @@ -462,24 +462,22 @@ class JavaBeanInfo { } } - Field[] classfields; + List classfields; { - List result = new ArrayList(declaredFields.length); + classfields = new ArrayList(declaredFields.length); for (Field f : declaredFields) { if ((f.getModifiers() & Modifier.PUBLIC) != 0) { - result.add(f); + classfields.add(f); } } for (Class c = clazz.getSuperclass(); c != null && c != Object.class; c = c.getSuperclass()) { for (Field f : c.getDeclaredFields()) { if ((f.getModifiers() & Modifier.PUBLIC) != 0) { - result.add(f); + classfields.add(f); } } } - classfields = new Field[result.size()]; - result.toArray(classfields); } for (Field field : classfields) { diff --git a/src/main/java/com/alibaba/fastjson/util/TypeUtils.java b/src/main/java/com/alibaba/fastjson/util/TypeUtils.java index 3f82c2a54..d450b749e 100755 --- a/src/main/java/com/alibaba/fastjson/util/TypeUtils.java +++ b/src/main/java/com/alibaba/fastjson/util/TypeUtils.java @@ -819,10 +819,9 @@ public class TypeUtils { boolean jsonFieldSupport, // boolean fieldGenericSupport) { Map fieldInfoMap = new LinkedHashMap(); - + + Field[] declaredFields = clazz.getDeclaredFields(); if (!fieldOnly) { - Field[] declaredFields = clazz.getDeclaredFields(); - for (Method method : clazz.getMethods()) { String methodName = method.getName(); int ordinal = 0, serialzeFeatures = 0; @@ -1007,8 +1006,25 @@ public class TypeUtils { } } - // - for (Field field : clazz.getFields()) { + List classfields; + { + classfields = new ArrayList(declaredFields.length); + for (Field f : declaredFields) { + if ((f.getModifiers() & Modifier.PUBLIC) != 0) { + classfields.add(f); + } + } + + for (Class c = clazz.getSuperclass(); c != null && c != Object.class; c = c.getSuperclass()) { + for (Field f : c.getDeclaredFields()) { + if ((f.getModifiers() & Modifier.PUBLIC) != 0) { + classfields.add(f); + } + } + } + } + + for (Field field : classfields) { if ((field.getModifiers() & Modifier.STATIC) != 0) { continue; }