You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gson反序列化JSON时丢失originalFileName属性的原因及解决办法

Gson反序列化丢失originalFileName字段问题原因及解决方案

问题产生原因

Gson反序列化过程中originalFileName字段丢失,通常是以下几类原因导致:

  • 字段名不匹配:Gson默认严格匹配JSON字段名和Java类字段名,若JSON中字段名拼写、大小写、命名风格(如下划线命名original_file_name和驼峰命名originalFileName)不对应,会直接跳过该字段解析。
  • 字段修饰符异常:如果VideoBean类中originalFileName字段被transient或static关键字修饰,Gson默认会排除这类字段的序列化/反序列化逻辑。
  • 字段被配置为排除解析:
    • 字段添加了@Expose(deserialize = false)注解,且Gson实例开启了excludeFieldsWithoutExposeAnnotation()配置
    • 自定义了Gson字段排除规则,将originalFileName纳入了排除列表
  • 类型不匹配:JSON中originalFileName的值类型和Java类中定义的字段类型不兼容(比如JSON中是数值类型,Java类中定义为String类型),默认配置下Gson解析失败会静默跳过该字段,不会抛出异常。
  • 代码混淆导致字段名被修改:打包时开启了ProGuard/R8混淆,VideoBean的字段名被混淆为无意义的短命名,和JSON中的字段名无法匹配。

解决方案

针对上述原因,可对应采取以下方案保障反序列化正常:

  • 字段名适配:优先保证JSON和Java类字段名完全一致,也可以直接给Java字段添加@SerializedName注解强制绑定对应JSON字段,支持多别名适配:
    @SerializedName(value = "originalFileName", alternate = {"original_file_name", "sourceFileName"})
    private String originalFileName;
    
  • 移除异常修饰符:去掉originalFileName字段的transient、static修饰符,定义为普通实例成员变量。
  • 调整解析排除规则:
    • 若开启了excludeFieldsWithoutExposeAnnotation(),给originalFileName添加@Expose(deserialize = true)注解
    • 调整自定义排除规则,将originalFileName从排除列表移除
  • 统一字段类型:保证JSON中originalFileName的值类型和Java类中定义的类型一致,特殊场景可自定义TypeAdapter实现类型转换。
  • 新增混淆豁免规则:在混淆配置文件中添加规则,禁止混淆VideoBean类及内部成员:
    -keep class 你的实际包名.VideoBean { *; }
    
  • 开启Gson容错配置:创建Gson实例时开启宽松解析规则,降低格式兼容问题导致的解析失败概率:
    Gson gson = new GsonBuilder().setLenient().create();
    

内容的提问来源于stack exchange,提问作者李国兵

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:06:05