kotlingson反序列化默认值失效深入讲解-创新互联

Gson反序列化原理

创新互联建站专注为客户提供全方位的互联网综合服务,包含不限于成都网站制作、网站建设、外贸网站建设、任县网络推广、小程序设计、任县网络营销、任县企业策划、任县品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们大的嘉奖;创新互联建站为所有大学生创业者提供任县建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com

原理简述


gson反序列化主要分为两个过程:

  • 根据TypeToken创建出对象
  • 根据json字符串解析数据,对对象属性赋值

对象的创建


ConstructorConstructor.get

  • 先尝试获取无参构造函数
  • 失败则尝试List、Map等情况的构造函数
  • 最后使用Unsafe.newInstance兜底(此兜底不会调用构造函数,导致所有对象初始化代码不会调用)
public  ObjectConstructor 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);
 }

分享文章:kotlingson反序列化默认值失效深入讲解-创新互联
标题网址:http://www.hxwzsj.com/article/dejipo.html

其他资讯

Copyright © 2025 青羊区翔捷宏鑫字牌设计制作工作室(个体工商户) All Rights Reserved 蜀ICP备2025123194号-14
友情链接: 梓潼网站设计 宜宾网站设计 营销网站建设 企业网站制作 成都企业网站设计 四川成都网站设计 企业网站建设 成都网站建设 泸州网站建设 成都网站设计 网站建设费用 营销型网站建设 网站制作 成都品牌网站设计 网站设计制作 公司网站建设 手机网站制作 定制级高端网站建设 网站设计制作报价 成都网站制作公司 高端网站设计推广 做网站设计