Gson反序列化原理
原理简述
gson反序列化主要分为两个过程:
对象的创建
ConstructorConstructor.get
publicObjectConstructor get(TypeToken typeToken) { final Type type = typeToken.getType(); final Class<? super T> rawType = typeToken.getRawType(); // first try an instance creator @SuppressWarnings("unchecked") // types must agree final InstanceCreator typeCreator = (InstanceCreator ) instanceCreators.get(type); if (typeCreator != null) { return new ObjectConstructor () { @Override public T construct() { return typeCreator.createInstance(type); } }; } // Next try raw type match for instance creators @SuppressWarnings("unchecked") // types must agree final InstanceCreator rawTypeCreator = (InstanceCreator ) instanceCreators.get(rawType); if (rawTypeCreator != null) { return new ObjectConstructor () { @Override public T construct() { return rawTypeCreator.createInstance(type); } }; } // 获取无参构造函数 ObjectConstructor defaultConstructor = newDefaultConstructor(rawType); if (defaultConstructor != null) { return defaultConstructor; } // 获取List ,Map 等构造函数,对于List,Map的情况 ObjectConstructor defaultImplementation = newDefaultImplementationConstructor(type, rawType); if (defaultImplementation != null) { return defaultImplementation; } // unSafe构造出对象,不调用任何的构造函数 // finally try unsafe return newUnsafeAllocator(type, rawType); }