Java使用Gson实现对象深度序列化:自定义类字段未序列化如何解决
解决方法
问题核心有两个常见原因:一是Gson默认忽略值为null的字段,你代码中islandLocation初始值为null所以被过滤;二是SimpleLoc类不符合Gson序列化规则,可按以下步骤修复:
- 第一步:开启Gson的null值序列化配置
默认new Gson()创建的实例不会序列化值为null的字段,改用GsonBuilder构造实例并开启serializeNulls配置即可。Gson默认支持递归序列化所有符合规则的嵌套对象,无需手动编写每个字段的序列化逻辑,修改后的序列化方法如下:public String serialize() { Gson gson = new GsonBuilder() .serializeNulls() // 序列化null值字段 .create(); return gson.toJson(this); } - 第二步:检查
SimpleLoc类的序列化合规性
要确保SimpleLoc满足以下要求,否则即使字段赋值为非null也会序列化失败:- 不能是非静态内部类,如果是定义在其他类内部的类,需要加
static修饰,避免持有外部类引用导致序列化异常 - 保留可访问的无参构造方法,如果你手动写了带参构造,需要显式补充无参构造
- 类中需要序列化的字段不要加
transient、static修饰符,否则会被Gson默认排除
- 不能是非静态内部类,如果是定义在其他类内部的类,需要加
- 可选配置:如果后续需要排除特定字段的序列化,仅需要给对应字段加
transient修饰即可,无需修改序列化逻辑。
内容的提问来源于stack exchange,提问作者LIMPIX64
相关产品推荐
相关产品推荐

