該文為個人學習筆記,如有錯誤,煩請大佬指出~~~
說明:
--通過GsonBuilder 創(chuàng)建的Gson對象、那么就用自定義的TyperAdapter來完成json的解析
--通過new Gson()創(chuàng)建的Gson對象,那么就用Java反射機制來完成json的解析
1.解析
--會先找匹配的typeAdapter,調(diào)用read()函數(shù)進行解析
2.注解
--Expose(設(shè)置不需要序列化、反序列話的字段)
調(diào)用:Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create()
--需要每個字段都標注@Expose
class User{
@Expose
private String userName;
@Expose (serialize = false)
private String pwd;
}
--SerializedName (設(shè)置別名)
適用場景: 比如字段名為 version-code 、服務(wù)器端和本地的字段名不一致
class User{
@SerializedName(value = "A")
private int a = 1;
private int b = 2;
}
--Since 和 Until(根據(jù)GsonBuilder進行版本控制, 使用的場景比較少)
--JsonAdapter
--該注解用在類上~~~接收參數(shù)必須是 TypeAdpater,JsonSerializer或JsonDeserializer 之一
--SerializedName 、FieldNamingStrategy、Since、Until、Expos用在POJO上
--使用時不用再使用 GsonBuilder去注冊UserTypeAdapter了。
--JsonAdapter的優(yōu)先級比GsonBuilder.registerTypeAdapter的優(yōu)先級更高。
3.自定義序列化、反序列化 (實現(xiàn)JsonSerializer、JsonDeserializer 接口)
--調(diào)用:通過GsonBuilder.registerTypeAdapter()指定
4.自定義TypeAdapter
5.TypeToken(不再重復(fù)定義Result類 )
--eg.
public class Result<T> {
public int code;
public String message;
public T data;
}
--T 為User
Type userType = new TypeToken<Result<User>>(){}.getType();
Result<User> userResult = gson.fromJson(json,userType);
User user = userResult.data;
--T為 List<User>
Type userListType = new TypeToken<Result<List<User>>>(){}.getType();
Result<List<User>> userListResult = gson.fromJson(json,userListType);
List<User> users = userListResult.data;