基于Android的Gson源码阅读心得

Gson是一个可以将json字符串转化为jsonObject、class对象的类库。可以作用于任意的Java对象,包括完整的泛型支持。
1、搭建Android工程demo

引进Gson包


Android studio新建工程,在app下面的build.gradle中添加:

compile 'com.google.code.gson:gson:2.7'

2、读取本地Json文件


3、创建子线程
读取Json文件,并采用Gson库中的接口,对其进行解析


4、在UI 主线程中采用Handle获取解析的数据进行展示

5、源码说明:

使用接触最多的就是Gson和GsonBuilder类。

其中,GsonBuilder就是Gson的builder类,采用建造者模式方式,来简化Gson构造方法需要的参数。

Gson构造方法如下:

GsonBuilder类内容进行说明:

private Excluder excluder = Excluder.DEFAULT;
用于配置一些不希望被转换成JSON格式的对象的成员变量

private LongSerializationPolicy longSerializationPolicy = LongSerializationPolicy.DEFAULT;
private FieldNamingStrategy fieldNamingPolicy = FieldNamingPolicy.IDENTITY;
private final Map<Type, InstanceCreator<?>> instanceCreators
    = new HashMap<Type, InstanceCreator<?>>();
private final List<TypeAdapterFactory> factories = new ArrayList<TypeAdapterFactory>();

Gson类说明:

是最常使用的对象,包括:

public <T> T fromJson(String json, Class<T> classOfT) throws JsonSyntaxException
public static <T> T jsonStringToClass(String jsonString, Class<T> tClass

public String toJson(Object src)
构造函数中就是将参数列表中的对象配置为成员变量

TypeAdapterFactory的操作如下:

List<TypeAdapterFactory> factories = new ArrayList<TypeAdapterFactory>();

// built-in type adapters that cannot be overridden
factories.add(TypeAdapters.JSON_ELEMENT_FACTORY);
factories.add(ObjectTypeAdapter.FACTORY);

// the excluder must precede all adapters that handle user-defined types
factories.add(excluder);

// user's type adapters
factories.addAll(typeAdapterFactories);

// type adapters for basic platform types
factories.add(TypeAdapters.STRING_FACTORY);
factories.add(TypeAdapters.INTEGER_FACTORY);
factories.add(TypeAdapters.BOOLEAN_FACTORY);
factories.add(TypeAdapters.BYTE_FACTORY);
factories.add(TypeAdapters.SHORT_FACTORY);
TypeAdapter<Number> longAdapter = longAdapter(longSerializationPolicy);
factories.add(TypeAdapters.newFactory(long.class, Long.class, longAdapter));
factories.add(TypeAdapters.newFactory(double.class, Double.class,
        doubleAdapter(serializeSpecialFloatingPointValues)));
factories.add(TypeAdapters.newFactory(float.class, Float.class,
        floatAdapter(serializeSpecialFloatingPointValues)));

此处,factories预先记载了很多基本类型转换组件的Factory,factories.addAll(typeAdapterFactories)是添加构造函数中传入的用户自定义的TypeAdapterFactory

TypeAdapters

抽象类,提供了两个抽象函数作为hook函数来让用户重载

TypeAdapterFactory

是一个接口

<T> TypeAdapter<T> create(Gson gson, TypeToken<T> type);
TypeAdapters
定义了几乎所有的基础类型的TypeAdapter和Factory

fromJson()

只要分为三个步骤:
TypeToken<T> typeToken = (TypeToken<T>) TypeToken.get(typeOfT);//获得要转换类型对应的TypeToken对象
TypeAdapter<T> typeAdapter = getAdapter(typeToken);//通过type来获得Adapter
T object = typeAdapter.read(reader);//通过typeAdapter来转换对象

toJson

toJson和fromJson很像,就是获得相应的TypeAdapter,只不过这次调用的是write方法



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章