最详细gson使用解析

一、Gson的基本用法

fromJson()实现反序列化,toJson()实现了序列化

二、属性重命名 @SerializedName 注解的使用

  • 在属性名上注解 @SerializedName,使POJO中的属性名转为json的键名
  • SerializedName注解还有一个属性alternate,接收一个String数组
      eg: @SerializedName(value = "data", alternate = {"Date", "date"})
     注:当json中的键名出现data Date date任意一个时均可以得到正确的结果。

三、Gson中使用泛型

对于JSON中的Number、boolean、Object、String和Array,可以直接使用

Gson gson = new Gson();
String jsonArray = "[\"Android\",\"Java\",\"PHP\"]";
String[] strings = gson.fromJson(jsonArray, String[].class);

而对于List<String>.class则行不通,所以诞生了 new TypeToken<List<String>>() {}.getType()

例如:

Gson gson = new Gson();
String jsonArray = "[\"Android\",\"Java\",\"PHP\"]";
List<String> stringList = gson.fromJson(jsonArray, new TypeToken<List<String>>() {}.getType());

四、一个完整的例子:

Result<T>适合任意{"code":"0","message":"success","data":{}}和{"code":"0","message":"success","data":[]}的格式

public class TestC {
   public static void main(String[] args) {
       String jsonString="{\"code\":\"0\",\"message\":\"success\",\"data\":{\"data\": \"hello java\"}}";
       Gson gson = new Gson();
       Result<DateBean> resutlDate=gson.fromJson(jsonString,new TypeToken<Result<DateBean>>(){}.getType());
       System.out.println(resutlDate.getData().getDate());
   }
}

public class DateBean {
   @SerializedName("data")
   public String date;
   public String getDate() {
       return date;
   }
   public void setDate(String date) {
       this.date = date;
   }
}

public class Result<T> {
   public int code;
   public String message;
   public T data;

   public String getMessage() {
       return message;
   }
   public void setMessage(String message) {
       this.message = message;
   }
   public T getData() {
       return data;
   }
   public void setData(T data) {
       this.data = data;
   }
   public int getCode() {
       return code;
   }
   public void setCode(int code) {
       this.code = code;
   }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容