Gson原理

来源:互联网 发布:动态桌面壁纸软件下载 编辑:程序博客网 时间:2024/05/17 00:08

http://blog.csdn.net/chunqiuwei/article/category/5881669gson笔记)

 

http://blog.csdn.net/chunqiuwei/article/details/49401733(工作原理概述)

 

http://blog.csdn.net/chunqiuwei/article/details/49338053gson反射机制讲解一)

 

http://blog.csdn.net/chunqiuwei/article/details/49535419gson反射机制讲解二)

 

 

http://blog.csdn.net/chunqiuwe

GSON原理:

1)如果是通过GsonBuilder创建的Gson对象,那么就用自定义的TyperAdapter来完成json的解析
2)如果是通过new Gson()创建的Gson对象,那么就用Java反射机制来完成json的解析。

 

判断创建方式:通过Gson的factories(List) 这个对add TypeAdapterFactory的顺序来控制的!

 

Gson解析成Java对象的实现原理
1)注册自定义的或者Gson自己定义的TypeAdapter
2)将TypeAdapter封装成TypeAdapterFactory,并把此Factory添加到Gson的factories(List)中
3)通过fromJson方法最终调用getAdapter,遍历factories,获取fromJson的第二个参数type与之对应的TypeAdapterFactory,调用该Factory的create方法来创建一个TypeAdapter
4)调用TypeAdapter的read方法完成json到Java Object的转换。

 

 

其调用的是Gson的有参构造器,而在这个有参构造器里面就让Gson的factories变量添加了大量的自定义的TypeAdapterFactory,这些TypeAdapterFactory和与之对应的TypeAdapter基本上都在TypeAdapters类里面,当然也有其余的几个单独的TypeAdapterGson都提供了与之相对应的TypeAdapter类型

Gson用反射机制解析Json的流程如下: 
前提:通过调用Gson的getAdpter来过滤掉一些不用的TypeAdapterFactory,将能用的到的TypeAdapterFactory放入缓存中

 

1)从factories中取ReflectiveTypeAdapterFactory对象
2)调用ReflectiveTypeAdapterFactory的create方法,返回一个Adapter对象

3)在通过Adpater的read方法循环读取json:循环解析json串中的每一对name/value,并为你的javaBean里的某个变量并赋值调用了BoundField的read方法,进行读取;其实BoundFied是一个抽象类,提供了read和write方法

 

反序列化:Gson提供了fromJson()方法来实现从Json相关对象到java实体的方法

序列化:Gson提供了tojson()方法来实现从java实体到Json相关对象的方法