@@ -248,6 +248,10 @@ public boolean remove(Object rootObject) {
248248 }
249249
250250 public boolean set (Object rootObject , Object value ) {
251+ return set (rootObject , value , true );
252+ }
253+
254+ public boolean set (Object rootObject , Object value , boolean p ) {
251255 if (rootObject == null ) {
252256 return false ;
253257 }
@@ -273,13 +277,29 @@ public boolean set(Object rootObject, Object value) {
273277
274278 Object newObj = null ;
275279 if (nextSegement instanceof PropertySegement ) {
276- Class <?> parentClass = parentObject .getClass ();
277- JavaBeanSerializer beanSerializer = getJavaBeanSerializer (parentClass );
278- if (beanSerializer != null ) {
279- return false ;
280+ JavaBeanDeserializer beanDeserializer = null ;
281+ Class <?> fieldClass = null ;
282+ if (segment instanceof PropertySegement ) {
283+ String propertyName = ((PropertySegement ) segment ).propertyName ;
284+ Class <?> parentClass = parentObject .getClass ();
285+ JavaBeanDeserializer parentBeanDeserializer = getJavaBeanDeserializer (parentClass );
286+ if (parentBeanDeserializer != null ) {
287+ FieldDeserializer fieldDeserializer = parentBeanDeserializer .getFieldDeserializer (propertyName );
288+ fieldClass = fieldDeserializer .fieldInfo .fieldClass ;
289+ beanDeserializer = getJavaBeanDeserializer (fieldClass );
290+ }
280291 }
281292
282- newObj = new JSONObject ();
293+ if (beanDeserializer != null ) {
294+
295+ if (beanDeserializer .beanInfo .defaultConstructor != null ) {
296+ newObj = beanDeserializer .createInstance (null , fieldClass );
297+ } else {
298+ return false ;
299+ }
300+ } else {
301+ newObj = new JSONObject ();
302+ }
283303 } else if (nextSegement instanceof ArrayAccessSegement ) {
284304 newObj = new JSONArray ();
285305 }
@@ -2300,6 +2320,17 @@ protected JavaBeanSerializer getJavaBeanSerializer(final Class<?> currentClass)
23002320 return beanSerializer ;
23012321 }
23022322
2323+ protected JavaBeanDeserializer getJavaBeanDeserializer (final Class <?> currentClass ) {
2324+ JavaBeanDeserializer beanDeserializer = null ;
2325+ {
2326+ ObjectDeserializer deserializer = parserConfig .getDeserializer (currentClass );
2327+ if (deserializer instanceof JavaBeanDeserializer ) {
2328+ beanDeserializer = (JavaBeanDeserializer ) deserializer ;
2329+ }
2330+ }
2331+ return beanDeserializer ;
2332+ }
2333+
23032334 @ SuppressWarnings ("rawtypes" )
23042335 int evalSize (Object currentObject ) {
23052336 if (currentObject == null ) {
0 commit comments