Gson學習筆記

該文為個人學習筆記,如有錯誤,煩請大佬指出~~~

說明:
--通過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;

學習博客地址:http://www.itdecent.cn/p/e740196225a4

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容