Gson的使用

 

普通对象(Mapping)数据解析

  String json_str = "{"name":"kalen", "age":22}";
  Gson gson = new Gson();
  User user = gson.fromGson(json_str, User.class);

数组数据(Sequence)数据解析

Type listType = new TypeToken<List<String>>() {}.getType();//数组对应gson中的类型
List<String> target = new LinkedList<String>();//gson需要的转换对象或则数据来源
target.add("blah");
Gson gson = new Gson();
String json = gson.toJson(target, listType);
List<String> target2 = gson.fromJson(json, listType);

Gson是通过GsonBuilder生成,设定Gson的序列化和返序列号数据如:

Gson gson = new GsonBuilder()     
.registerTypeAdapter(Id.class, new IdTypeAdapter())   
.enableComplexMapKeySerialization()
.serializeNulls()   
.setDateFormat(DateFormat.LONG)  
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)//会把字段首字母大写
.setPrettyPrinting()
.setVersion(1.0)    
.create();

.GsonBuilder方法解释

  • setFieldNamingPolicy 设置序列字段的命名策略(UPPER_CAMEL_CASE,UPPER_CAMEL_CASE_WITH_SPACES,LOWER_CASE_WITH_UNDERSCORES,LOWER_CASE_WITH_DASHES)
  • addDeserializationExclusionStrategy 设置反序列化时字段采用策略ExclusionStrategy,如反序列化时不要某字段,当然可以采用@Expore代替。
  • excludeFieldsWithoutExposeAnnotation 设置没有@Expore则不序列化和反序列化
  • addSerializationExclusionStrategy 设置序列化时字段采用策略,如序列化时不要某字段,当然可以采用@Expore代替。
  • registerTypeAdapter 为某特定对象设置固定的序列和反序列方式,实现JsonSerializer和JsonDeserializer接口
  • setFieldNamingStrategy 设置字段序列和反序列时名称显示,也可以通过@Serializer代替
  • setPrettyPrinting 设置gson转换后的字符串为一个比较好看的字符串
  • setDateFormat 设置默认Date解析时对应的format格式

@Expose注解

如果采用new Gson()方式创建Gson则@Expose则没有任何效果,若采用GsonBuilder创建Gson并且调用了excludeFieldsWithoutExposeAnnotation则@Expose将会影响toJson和fromGson序列化和反序列化数据。如:

public class User {
    @Expose private String firstName;
    @Expose(serialize = false) private String lastName;
    @Expose(serialize = false, deserialize = false)
    private String emailAddress;
    private String password;
 }

例子中password不管是toJson还是fromJson都不会用到,emailAddress和lastName在序列化(fromJson)时将被采用,emailAddress在反序列化(toJson)时将不被采用。

可以通过@SerializedName对序列字段进行重命名,也可以自定义注解然后设置Gson字段解析策略setFieldNamingStrategy,具体在Retrofit Demo中有应用。


作者:老柏的博客
链接:https://www.jianshu.com/p/31396863d1aa
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值