gson 2.7 学习笔记

58 篇文章 0 订阅
53 篇文章 1 订阅

gson 2.7 学习笔记

概述

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

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之间进行转换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值