十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
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); }