Gson总结

 

1、

 

2、SerializedName属性值映射

  • @SerializedName("email_address")
     public String emailAddress;
  • 备选属性,只要命中其中一个就行,格式如 @SerializedName(value = "emailAddress", alternate = {"email", "email_address"})

3、Gson中使用泛型 TypeToken

当我们要通过Gson解析这个jsonArray时,一般有两种方式:使用数组,使用List。而List对于增删都是比较方便的,所以实际使用是还是List比较多。

数组比较简单:

String jsonArray = "["Android","Java","PHP"]";

String[] strings = gson.fromJson(jsonArray, String[].class);

但对于List将上面的代码中的 String[].class 直接改为 List<String>.class 是行不通的。对于Java来说 List<String> 和 List<User> 这俩个的字节码文件只一个那就是 List.class,这是Java泛型使用时要注意的问题:泛型擦除。

为了解决的上面的问题,Gson为我们提供了 TypeToken 来实现对泛型的支持,所以当我们希望使用将以上的数据解析为 List<String> 时需要这样写:

List<String> list = gson.fromJson(jsonArray, new TypeToken<List<String>>() {}.getType());

注:TypeToken的构造方法是 protected 修饰的,所以上面才会写成【new TypeToken<List<String>>() {}.getType()】而不是【new TypeToken<List<String>>().getType()】

 

4、使用GsonBuilder配置Gson

5、字段过滤的四种方法

  • 于注解@Expose 结合GsonBuilder使用

Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();//不配置时注解无效
  • 基于版本和注解@Since @Until

    Gson在对基于版本的字段导出提供了两个注解 @Since 和 @Until,需要和GsonBuilder.setVersion(Double)配合使用

    Since和Until注解的定义:@Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target({java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.TYPE})
    public @interface Since{
    double value();
    }    使用规则:当GsonBuilder中设置的版本大于等于Since的值时该字段导出,小于Until的值时该该字段导出;当一个字段被@Since和@Until同时注解时,需两者同时满足条件。

  • TypeAdapter 自定义(反)序列化

  • Json(De)Serializer

  • 注解 @JsonAdapter
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值