Gson中toJson和fromObject简单原理

使用Gson gsom=new Gson()、Gson gson=new GsonBuild().registerTypeAdapter().create(),中调用toJson(Object)原理:

toJson(Object)方法

1:我们在调用该方法的时候,会调用Gson方法中

public String toJson(Object src) { 
return src == null ? this.toJson((JsonElement)JsonNull.INSTANCE) : this.toJson((Object)src, (Type)src.getClass());
//会调用该方法this.toJson((Object)src, (Type)src.getClass()方法,并且将的类封装成类Type 
}

最后调用到该核心方法:public void toJson(Object src, Type typeOfSrc, JsonWriter writer)方法

public void toJson(Object src, Type typeOfSrc, JsonWriter writer) throws JsonIOException {
		//this.getAdapter 核心方法,需要注意
		//获取属性对应的TypeAdapter,这里是关键点,若我们有自定义则获取我们的
		//一个类有多少个属性toJson就会调用多少次,然后根据属性的类型使用对应的TypeAdapter进行处理
        TypeAdapter adapter = this.getAdapter(TypeToken.get(typeOfSrc));
        try {
        	//TypeAdapter使用开始进行序列化
            adapter.write(writer, src);
        } catch (IOException var13) {
            throw new JsonIOException(var13);
        } catch (AssertionError var14) {
            throw new AssertionError("AssertionError (GSON 2.8.5): " + var14.getMessage(), var14);
        } finally {
         略...
        }
    }

fromObject方法

该方法其实和toJson大体相同,都是通过获取TypeAdapter,通过对应的TypeAdapter进行处理反序列

public  T fromJson(JsonReader reader, Type typeOfT){
        略...
        TypeAdapter typeAdapter;
        try {
            try {
                reader.peek();
                isEmpty = false;
                //将调用fromJson(String json,Type type)中的type封装成了TypeToken 
                TypeToken typeToken = TypeToken.get(typeOfT);
                //获取typeAdapter
                //类中每个属性在反序列化中都会调用fromJson,进行获取typeAdapter
                //然后基本类型会调用到Gson自带的typeAdapter
                //我们针对某类型的typeAdapter自然会在这里被获取到typeAdapter进行针对处理
                typeAdapter = this.getAdapter(typeToken);
                T object = typeAdapter.read(reader);
                Object var8 = object;
                return var8;
            } catch (EOFException var15) {
                if (!isEmpty) {
                    throw new JsonSyntaxException(var15);
                }
            } catch (IllegalStateException var16) {
                throw new JsonSyntaxException(var16);
            } catch (IOException var17) {
                throw new JsonSyntaxException(var17);
            } catch (AssertionError var18) {
                throw new AssertionError("AssertionError (GSON 2.8.5): " + var18.getMessage(), var18);
            }

            typeAdapter = null;
        } finally {
            reader.setLenient(oldLenient);
        }

结尾:
有什么疑惑,可以私聊脐橙,多多交流学习!

你可能感兴趣的:(Gson中toJson和fromObject简单原理)