[alibaba/fastjson]android-1.1.67 序列化出错

2025-11-03 373 views
7

12-28 12:32:05.977 E/AndroidRuntime(18542): Process: com.souyidai.investment.android, PID: 18542 12-28 12:32:05.977 E/AndroidRuntime(18542): com.alibaba.fastjson.JSONException: write javaBean error, fastjson version 1.1.67 12-28 12:32:05.977 E/AndroidRuntime(18542): at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:657) 12-28 12:32:05.977 E/AndroidRuntime(18542): at com.alibaba.fastjson.serializer.JSONSerializer.write(JSONSerializer.java:262) 12-28 12:32:05.977 E/AndroidRuntime(18542): at com.alibaba.fastjson.JSON.toJSONString(JSON.java:695) 12-28 12:32:05.977 E/AndroidRuntime(18542): at com.alibaba.fastjson.JSON.toJSONString(JSON.java:415) 12-28 12:32:05.977 E/AndroidRuntime(18542): at com.alibaba.fastjson.JSON.toJSONString(JSON.java:411) 12-28 12:32:05.977 E/AndroidRuntime(18542): at com.xxx.xxxxx 12-28 12:32:05.977 E/AndroidRuntime(18542): at android.view.View.performClick(View.java:5619) 12-28 12:32:05.977 E/AndroidRuntime(18542): at android.view.View$PerformClick.run(View.java:22295) 12-28 12:32:05.977 E/AndroidRuntime(18542): at android.os.Handler.handleCallback(Handler.java:754) 12-28 12:32:05.977 E/AndroidRuntime(18542): at android.os.Handler.dispatchMessage(Handler.java:95) 12-28 12:32:05.977 E/AndroidRuntime(18542): at android.os.Looper.loop(Looper.java:163) 12-28 12:32:05.977 E/AndroidRuntime(18542): at android.app.ActivityThread.main(ActivityThread.java:6337) 12-28 12:32:05.977 E/AndroidRuntime(18542): at java.lang.reflect.Method.invoke(Native Method) 12-28 12:32:05.977 E/AndroidRuntime(18542): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:880) 12-28 12:32:05.977 E/AndroidRuntime(18542): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:770) 12-28 12:32:05.977 E/AndroidRuntime(18542): Caused by: com.alibaba.fastjson.JSONException: get property error。 android.content.pm.ComponentInfo.getBannerResource 12-28 12:32:05.977 E/AndroidRuntime(18542): at com.alibaba.fastjson.serializer.FieldSerializer.getPropertyValue(FieldSerializer.java:100) 12-28 12:32:05.977 E/AndroidRuntime(18542): at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:353) 12-28 12:32:05.977 E/AndroidRuntime(18542): ... 14 more 12-28 12:32:05.977 E/AndroidRuntime(18542): Caused by: java.lang.reflect.InvocationTargetException 12-28 12:32:05.977 E/AndroidRuntime(18542): at java.lang.reflect.Method.invoke(Native Method) 12-28 12:32:05.977 E/AndroidRuntime(18542): at com.alibaba.fastjson.util.FieldInfo.get(FieldInfo.java:351) 12-28 12:32:05.977 E/AndroidRuntime(18542): at com.alibaba.fastjson.serializer.FieldSerializer.getPropertyValue(FieldSerializer.java:92) 12-28 12:32:05.977 E/AndroidRuntime(18542): ... 15 more 12-28 12:32:05.977 E/AndroidRuntime(18542): Caused by: java.lang.NullPointerException: Attempt to read from field 'int android.content.pm.PackageItemInfo.banner' on a null object reference 12-28 12:32:05.977 E/AndroidRuntime(18542): at android.content.pm.ComponentInfo.getBannerResource(ComponentInfo.java:153) 12-28 12:32:05.977 E/AndroidRuntime(18542): ... 18 more

尝试序列化android中的ServiceInfo出错, 简单看了一下,似乎是因为调用了ComponentInfo.getBannerResource

由于ServiceInfo是我用反射构造出来的,所以有一些字段没有初始化, 在调用上述方法时用了一个未初始化的字段,于是就挂了.

回答

3

函数调用:

JSON.toJSONString(object, SerializerFeature.DisableCircularReferenceDetect, SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.WriteNullBooleanAsFalse, SerializerFeature.WriteNullNumberAsZero, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullListAsEmpty, SerializerFeature.PrettyFormat);

8

@wenshao 请问这个问题会修复么~

1

@su1216 下个版本会增加一个属性,忽略getter报错的字段

3

我有一点不太明白,序列化时为什么会调用getBannerResource这个函数,ComponentInfo和其父类中都没有bannerResource这个属性

9

我遇到了这个问题,有搞了一个下午了,可以指点一下吗?大哥