Gson 你真的懂吗?

本文探讨了Gson在处理内部类嵌套序列化时的问题及解决方案,包括静态嵌套类的处理和非静态内部类的自定义实例生成器。此外,详细阐述了Gson对数组和集合的序列化与反序列化的实践,指出了集合反序列化的局限性,即需要指定泛型类型。还介绍了JsonElement的使用,包括如何判断和转换Json元素。
摘要由CSDN通过智能技术生成

平时使用 Gson 可能也就使用下基本功能,但是你对 Gson 真的了解吗?

对于含有内部类的嵌套类序列化

对于静态嵌套类, Gson 可以非常容易地进行序列化。但是对于纯内部类,Gson 不能进行反序列化,因为它们的无参构造函数还要对反序列化时不可用的 Object 进行引用。比如,当反序列化 Hand 时,需要引用 Person,但是此时 Person 不能被引用。

public class Person {
    private Hand hand;

    private class Hand {
        private String thumb;
        
    }
}

解决办法有两种:

  • 指定内部类为静态类,
  • 给内部类提供一个自定义的实例生成器。
public class InstanceCreatorForHand implements InstanceCreator<Person.Hand> {
  private final Person person;
  public InstanceCreatorForHand(Person person)  {
    this.person = person;
  }
  public Person.Hand createInstance(Type type) {
    return person.new Hand();
  }
}

数组实践

  • 序列化
Gson gson = new Gson();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值