diff --git a/src/main/java/com/alibaba/fastjson/parser/JavaBeanDeserializer.java b/src/main/java/com/alibaba/fastjson/parser/JavaBeanDeserializer.java index 8da4730d3..8723968c3 100755 --- a/src/main/java/com/alibaba/fastjson/parser/JavaBeanDeserializer.java +++ b/src/main/java/com/alibaba/fastjson/parser/JavaBeanDeserializer.java @@ -779,7 +779,10 @@ public class JavaBeanDeserializer implements ObjectDeserializer { } } - if (fieldDeserializer == null && parser.lexer.isEnabled(Feature.SupportNonPublicField)) { + final int mask = Feature.SupportNonPublicField.mask; + if (fieldDeserializer == null + && ((parser.lexer.features & mask) != 0 + || (this.beanInfo.parserFeatures & mask) != 0)) { if (this.extraFieldDeserializers == null) { ConcurrentHashMap extraFieldDeserializers = new ConcurrentHashMap(1, 0.75f, 1); Field[] fields = this.clazz.getDeclaredFields(); diff --git a/src/main/java/com/alibaba/fastjson/parser/JavaBeanInfo.java b/src/main/java/com/alibaba/fastjson/parser/JavaBeanInfo.java index 1380fae48..3dea70608 100755 --- a/src/main/java/com/alibaba/fastjson/parser/JavaBeanInfo.java +++ b/src/main/java/com/alibaba/fastjson/parser/JavaBeanInfo.java @@ -35,6 +35,8 @@ class JavaBeanInfo { public final String typeName; + public final int parserFeatures; + JavaBeanInfo(Class clazz, // Constructor defaultConstructor, // Constructor creatorConstructor, // @@ -49,6 +51,8 @@ class JavaBeanInfo { this.factoryMethod = factoryMethod; this.fields = fields; this.jsonType = jsonType; + + int parserFeatures = 0; if (jsonType != null) { String typeName = jsonType.typeName(); if (typeName.length() != 0) { @@ -56,9 +60,14 @@ class JavaBeanInfo { } else { this.typeName = clazz.getName(); } + + for (Feature feature : jsonType.parseFeatures()) { + parserFeatures |= feature.mask; + } } else { this.typeName = clazz.getName(); } + this.parserFeatures = parserFeatures; boolean supportBeanToArray = false; if (jsonType != null) {