gson 2.7 學習筆記
概述
- 參考
- http://www.jianshu.com/p/e740196225a4
GsonBuilder—->入口
- com.google.gson.GsonBuilder.create—->利用serializeNulls、類型擴充卡、FieldNamingPolicy等政策建立gson
Gson—->主要操作類
- typeTokenCache—->用于存放以類型資訊為key的類型擴充卡緩存
- factories—->建立json時添加一系列類型擴充卡工廠,例如STRING_FACTORY/ReflectiveTypeAdapterFactory
- com.google.gson.Gson.toJson(java.lang.Object, java.lang.reflect.Type, com.google.gson.stream.JsonWriter)
- ((TypeAdapter) adapter).write(writer, src)
- com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.BoundField.write—->将pojo的值利用反射寫入JsonWriter
- 利用TypeAdapter将T寫入到JsonWriter
- com.google.gson.Gson.fromJson(com.google.gson.stream.JsonReader, java.lang.reflect.Type)
- object = typeAdapter.read(reader)
- com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.BoundField.read—->pojo對象利用反射注入值
- com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.Adapter.read
- 利用typeAdapter将JsonReader的内容轉為T
- object = typeAdapter.read(reader)
- ((TypeAdapter) adapter).write(writer, src)
JsonElement—->json元素
- JsonObject
- members—->包含name-value pairs JsonElement
- 提供建立擷取元素
- JsonArray
- elements—->數組元素支援
- 添加、擷取、疊代元素
- JsonPrimitive
- 8種基本類型與封裝類型支援
- JsonNull
- null對象支援
TypeAdapter—->類型擴充卡
- 從JsonReader讀取字元流轉為T,将T利用JsonWriter轉為字元流
- TypeAdapters—->提供基本類型的類型擴充卡,例如BOOLEAN、BYTE、LONG等類型擴充卡
- ReflectiveTypeAdapterFactory—->TypeAdapterFactory
- com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.Adapter
- com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.BoundField—->反射解析出來的字段資訊
- 利用注解轉換Java中普通的POJO
- FieldNamingPolicy—->FieldNamingStrategy
- 将字段名稱按照政策進行轉換,例如字段名稱、首字母大寫、小寫下劃線
JsonWriter/JsonReader—->json流支援
- com.google.gson.stream.JsonWriter.value(java.lang.String)—->寫字段值
- com.google.gson.stream.JsonReader.nextString—->讀取字段值
JsonToken—->json的辨別符
注解支援—->SerializedName/Expose/JsonAdapter
- SerializedName用于支援序列化與反序列化的字段名稱,會覆寫FieldNamingStrategy
- Expose用于表示字段是否應該序列化與反序列化
- JsonAdapter以注解的方式支援TypeAdapter
TypeToken—->對java泛型擦除的補充
- 記錄原生類型與參數化類型資訊
測試
- 示例代碼位于– https://github.com/undergrowthlinear/2016MyBookSummary.git
- com.undergrowth.google.gson.GsonDemo.main
- com.undergrowth.google.gson.writer.JsonWriterDemo.main
- com.undergrowth.google.gson.jsonadapter.UserJsonAdapter.main
- 詳細講解toJson與fromJson資料流
- gson.toJson/fromJson
- com.google.gson.Gson.toJson(java.lang.Object, java.lang.reflect.Type, com.google.gson.stream.JsonWriter)
- com.google.gson.Gson.getAdapter(com.google.gson.reflect.TypeToken)—->查找擴充卡
- candidate = factory.create(this, type)—->利用初始化的擴充卡工廠建立擴充卡
- com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create—->對于POJO,調用此方法
- com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.Adapter.Adapter
- 利用此read/wirte利用JsonWriter/JsonReader将T與json之間進行轉換