Android Gson @SerializedName 设置别名(alternate) 打release包解析有误

涉及 Gson 解析 Json 数据时使用@SerializedName 注解设置实体别名。


问题描述

项目运行Debug包时,能正常解析,当打 release 包时,出现部分数据解析错误,甚至是直接为 null,一瞬间很懵。

部分代码如下:

    @SerializedName(value = "USER_NAME", alternate = {"user_name","username"})
    private String userName;

说明:alternate 表示设置json转bean时的别名,value 表示默认名称

解决方案

proguard-rules.pro 文件中设置混淆

-keepattributes Signature
-keep class com.xx.xxx.beans.** {*;}
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
-keepclassmembers,allowobfuscation class * {
  @com.google.gson.annotations.SerializedName <fields>;
}

com.xx.xxx.beans 表示实体的包名

解释说明:build.gradle 中release配置 minifyEnabled true 开启混淆后导致,配置取消SerializedName的混淆成功序列化。

没有最好,只有最合适
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容