Gson 基础教程 —— 自定义类型适配器(TypeAdapter)

GSON-使用指南(四) 本次文章的主要内容: TypeAdapter JsonSerializer与JsonDeserializer TypeAdapterFactory @JsonAdapter注解 TypeAdapter与 JsonSerializer、JsonDeserializer对比 TypeAdapter实例 一、TypeAdapter TypeAdapter 是Gson自2.1版本开始提供的一个抽象类,用于接管某种类型的序列化和反序列化过程,包含两个主要方法 write(JsonWriter,T) 和 阅读详情

1,实现一个类型适配器(TypeAdapter)

自定义类型适配器需要实现两个接口:

JsonSerializer<T>

JsonDeserializer<T>

和两个方法:

//序列化
public JsonElement serialize(T src, Type typeOfSrc, JsonSerializationContext context);

//反序列化
public T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
      throws JsonParseException;

其中 JsonElement 的类层次为:


2,注册类型适配器

Gson gson = new GsonBuilder()
		            .registerTypeAdapter(Timestamp.class, new TimestampAdapter())
		            .create();

3,自己写的一个 Timestamp 类型适配器

package com.gdsc.core.adapter;

import java.lang.reflect.Type;
import java.sql.Timestamp;

import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;

/**
 * Gson TypeAdapter
 * 实现了 Timestamp 类的 json 化
 * @author linwei
 *
 */
public class TimestampAdapter implements JsonSerializer<Timestamp>, JsonDeserializer<Timestamp> {

	@Override
	public Timestamp deserialize(JsonElement json, Type typeOfT,
			JsonDeserializationContext context) throws JsonParseException {
		if(json == null){
			return null;
		} else {
			try {
				return new Timestamp(json.getAsLong());
			} catch (Exception e) {
				return null;
			}
		}
	}

	@Override
	public JsonElement serialize(Timestamp src, Type typeOfSrc,
			JsonSerializationContext context) {
		String value = "";
		if(src != null){
			value = String.valueOf(src.getTime());
		}
		return new JsonPrimitive(value);
	}
	
}


Gson解析(6)——注册TypeAdapter及处理Enum类型 / 这个 state是枚举值。// json转为对象时调用,实现JsonDeserializer接口。// 对象转为Json时调用,实现JsonSerializer接口。 阅读详情

相关推荐

Gson系列5 --- 总结篇 -- TypeAdapter JsonSerializer 与 JsonDeserializer @JsonAdapter

# TypeAdapter JsonSerializer 与 JsonDeserializer @JsonAdapter 类的序列化与反序列化 @SEE @JsonAdapter篇 和 序列化null值 方式1: JsonSerializer 与 JsonDeserializer 可以 自动的与 @JsonAdapter 使用 方式2: 也可以手动注册...

sunrainamazing的博客 4744

Gson 自定义类型适配器 (TypeAdapter)

Gson的TypeAapter可以理解成自定义序列化和返序列化。 自定义类型适配器需要实现两个接口: JsonSerializer&lt;T&gt; JsonDeserializer&lt;T&gt; 和两个方法: //序列化 public JsonElement serialize(T src, Type typeOfSrc, JsonSerializationContext c...

android开发笔记 1万+

PacketTacer烟雾传感器读数为0的解决方法

PacketTacer烟雾传感器读数为0的解决方法

ChloeMax_的博客 1902

GSON 相同名称不同类型:GSON的TypeAdapter系列用法

原文地址 注:此系列基于Gson 2.4。 本次文章的主要内容: TypeAdapter JsonSerializer与JsonDeserializer TypeAdapterFactory @JsonAdapter注解 TypeAdapter与 JsonSerializer、JsonDeserializer对比 TypeAdapter实例 结语 后期预告 一、TypeAdapter TypeAdapter是Gson自2.0(源码注释上说的是2.1)开始版本提供的一个抽象类,用于接管.

vistaup的博客 1965

Windows系统的Mamba环境配置详细教程(状态空间模型)

causal_conv1d也是安装mamba的依赖必须库。安装完成后,通过pip list可以查看到安装的库。Triton是安装mamba的依赖,需要先安装。上述工作准备好后,按下面步骤安装。直接根据离线文件安装即可。是自己的虚拟环境名字。

2301_77831163的博客 3676

深入浅出ASAP2标准:手把手教你编写和解析A2L文件(含Python示例代码)

本文深入解析ASAP2标准下的A2L文件,涵盖基础概念、文件结构及Python实现代码,帮助开发者掌握汽车ECU标定和测量中的关键数据管理技术。通过详细示例,展示如何编写和解析A2L文件,提升电控数据管理效率。

happy2的博客 1099

Gson — 自定义类型适配器 (TypeAdapter)

背景 要实现java对象是Date类型,使用Gson转成json需要是long类型。这样我们可以通过自定义类型适配器去实现此需求。 实现 自定义adapter 集成 TypeAdapter 并覆盖write方法,利用jsonWriter.value()方法将date对象转化成任意你想要的值作为json输出值 public class DateToLongAdapter extends TypeAd...

Payne Yu的博客 3231

弘玑RPA进阶攻略

01.弘玑RPA产品概要。02.设计器的安装与卸载。03.设计器特性与使用。

长安诗社社长@-梁瀚文- https://github.com/HevnChin https://gitee.com/HevnChin 3644

gson TypeAdapter 适配器

Gson 使用指南(一) Gson 使用指南(二) Gson使用指南(三) Gson使用指南(四) TypeAdapter 是自 开始版本提供的一个,用于,包含两个注要方法 和 ,并 的主要是在,以及中 示例 当我们为 注册了r之后,那些之前介绍的通通都黯然失色,只会调用我们实现的方法再说一个场景,在该系列的第一篇文章就说到了,比如将转成 , 但如果有些情况下给你? 虽然这是服务器端的问题, 不就行了 JsonSerializer 与 JsonDeserializer ,,则可以使用 和 不

qq_40813329的博客 2125

【电源专题】Type-C母座外壳直接接主板GND还是接RC呢?别再纠结了!

Type-C屏蔽壳接地这件事,没有唯一标准答案。符合规范、贴合产品、能过认证,就是最优解。希望这篇文章能帮你理清思路。

一点硬件 599

从 OA 门户到 SAP 的单点登录全景解析

OA(Office Automation)门户往往已与企业身份证明源(Microsoft Entra ID、LDAP 等)集成。管理员希望:员工在 OA 登陆后访问 SAP Fiori Launchpad、OData API 或 RFC 接口时无需再次输入账号密码,而 SAP 仍能识别用户身份并执行基于角色的授权。此时 OA 可以直接充当 IdP,也可以把企业 IdP 发放的令牌转发给 SAP 充当 SP(service provider)。SAP Help Portal 将这类跨系统认证称为 single

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 997

TypeAdapter

从设计角度看,Adapter很容易联想到适配器设计模式。不错!TypeAdapter正是一个适配器,它提供了数据类型和Json格式转换的通道。在Gson的设计中,TypeAdapter负责对各种数据类型进行转换,比如:整型、Map类型、自定义类型等。TypeAdapter使用泛型设计,提供了两个抽象方法write和read。 把对象输出到JsonWriter中。JsonWriter提供...

海阔天空 1679

炼金术士的试炼:2026年企业信用信息公示系统极验五维反爬下的Python数据博弈与破局之道

企业信用信息公示系统(以下简称“公示系统”)作为国家市场监督管理总局权威发布平台,承载着全国亿万市场主体的登记、许可、处罚等核心信用数据。对于金融风控、市场分析、商业尽职调查等领域,这些数据具有不可替代的黄金价值。然而,公示系统在2025年至2026年间进行了数次史诗级的安全加固,构建了包含动态令牌、极致混淆的JavaScript混淆、无感行为指纹、智能语义验证码以及WebAssembly防护在内的“五维反爬长城”。

2201_76125261的博客 349

Gson TypeAdapter处理复杂JSON结构

JSON结构Kotlin数据类日期TypeAdapter?使用方式.create()流式处理优先:使用避免内存溢出防御式编程使用跳过未知字段检查peek()返回的token类型处理可能为null的值多态处理:TypeAdapterFactory 是处理继承结构的利器性能关键重用适配器实例避免中间对象创建委托子适配器处理错误处理// 处理null值// 其他类型处理...TypeAdapter 的核心原理和工作流程处理动态键、多态类型等复杂结构的实战技巧。

时小雨的专栏 858

立项书8分钟定生死?手把手教你用ChatGPT辅助打造高水平申报书,让评审专家一看就想打高分!

宏大叙事、空话堆砌只会让评审绕晕,不如聚焦一个具体问题,拿出清晰的研究路径、扎实的设计方案,把“我想做什么、为什么做、打算怎么做”讲明白。对评审来说,关键不在你读了多少,而在你能否看清领域的共识、争议和空白,GPT的作用就在于帮你理清研究脉络,发现问题结构,聚焦那些还没被充分讨论的变量或方法,去提升综述的深度。之前要用到ProcessOn、Draw.io等工具画流程图,现在有了ai虽然方便了,但也需要多次调教,如果嫌麻烦,七哥给大家准备了课题申报常用的流程图,技术路线图,方便大家直接拿来编辑填空使用。

智能AI让学术科研更容易 290

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

[Gson六]Gson类型适配器(TypeAdapter)

TypeAdapter的使用动机  Gson在序列化和反序列化时,默认情况下,是按照POJO类的字段属性名和JSON串键进行一一映射匹配,然后把JSON串的键对应的值转换成POJO相同字段对应的值,反之亦然,在这个过程中有一个JSON串Key对应的Value和对象之间如何转换(序列化/反序列化)的问题。   以Date为例,在序列化和反序列化时,Gson默认使用java.text.Dat...

bit1129的博客 1028

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Android Gson自定义类型适配器的高级应用场景原理剖析(23)

在Android开发中,Gson的默认序列化和反序列化机制虽然能处理大部分常见数据类型,但在面对复杂业务需求时存在局限性。自定义类型适配器(TypeAdapter)作为Gson扩展性的核心,能够实现以下功能: - 对特殊数据类型(如日期、枚举、自定义复合类型)进行特定格式转换 - 处理JSON与Java对象之间的结构差异 - 实现数据的加密与解密 - 动态生成或修改序列化后的JSON内容 - 优化复杂对象的序列化性能

Android开发领域创作者 1796

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Android Gson TypeAdapter接口定义与核心方法的原理深度剖析(10)

在Android开发中,Gson作为主流的JSON处理框架,其核心功能之一是实现Java对象与JSON数据之间的相互转换。而TypeAdapter接口则是这一转换过程的核心抽象,它定义了序列化和反序列化的基本操作,为开发者提供了高度定制化的数据转换能力。

Android开发领域创作者 1604

Gson 的TypeAdapter缺失引起的坑

Forgot to register a type adapter? 翻译结果是忘记注册类型的适配器 原因在序列化成gson的时候里面没有这个适配器 Gson中的属性 final List<TypeAdapterFactory> factories; final List<TypeAdapterFactory> builderFactories; final List<TypeAdapterFactory> builderHierarchyFactories;

qq_41450619的博客 1747

Swagger Codegen Java 客户端枚举模型深度解析:以 EnumTest 为例看内联枚举、Gson TypeAdapter 与 Parcelable 代码生成

本文以 swagger-codegen 为 okhttp-gson-parcelableModel 库生成的 `EnumTest` 模型为例,系统讲解 OpenAPI / Swagger 规范中的枚举定义是如何被翻译成 Java 代码的。读者读完可以掌握:内联枚举(模型内嵌 enum)与外部枚举(独立 enum 类)的生成差异、Gson `TypeAdapter` 与 `@JsonAdapter`

gitblog_00474的博客 637

Json转换利器Gson三、TypeAdapter的使用

使用默认自定义的TypeAdapter,GsonBuilder会调用自定义的适配器解析需要转换的java对象,如果未指定适配器,则会调用GsonBuilder默认的适配器进行解析,默认去解析java对象toString()方法package gson; import java.io.IOException; import java.lang.reflect.Type; import java.u

hsgao_water的博客 744

Gson使用四(TypeAdapter)

转载请出自出处:http://eksliang.iteye.com/blog/2175595 一.概述        Gson的TypeAapter可以理解成自定义序列化和返序列化 二、应用场景举例        例如我们通常去注册时(那些外国网站),会让我们输入firstName,lastName,但是转到我们都是国人吗,心想输入进去的fistName,lastName就要以userNa

ickes的专栏 765

Gson源码之TypeAdapter

TypeAdapter 1.抽象泛型类 抽象方法为write/read方法 2.该类主要用于进行读写操作,用于Json字符串和java object之间进行转换 方法说明 write(JsonWriter out, T value) 抽象方法 参数是JsonWrite以及java object。客户端用于进行写入操作 toJson(T value) 创建JsonWriter对象,然后将其和value一起传入write方法中 用于将Java Object转换为Js

meijing11的博客 904

Gson之TypeAdapter

    在研发工程中,当我们与服务器进行数据交互的时候,会定义数据格式,而Json是十分常用的格式。而对Json的格式化也是我们常要用到的,一般我会引入第三方框架来帮助我们进行解析工作。如Gson、fastJson、jackson等。     有时候,由于前后台一些数据格式的不一致或者默认值的不一致,会导致解析失败或者解析出来的数据我们在使用的时候有问题的情况。通常我使用Gson比较多,所以这里...

calm1516的专栏 6096

GSON源码分析之适配器模式及自定义适配器Adapter

GSON源码分析之适配器模式及自定义适配器Adapter ​ FastJson最近频频爆出严重漏洞,所以决定长痛不如短痛,把已有项目的FastJson全部替换成GSON。因为要尽量要避免改动业务代码,所以必须对GSON做深入研究,与FastJson比对并解决序列化与反序列化差异问题。因为差异较多,此文主要分析一下适配器源码,及其自定义适配器Adapter。 源码分析 1:入口GSON.fromJson(JsonReader reader, Type typeOfT): 2:分析获取getAdapter方法

hellodakee的博客 1169
上一篇: Java 正则表达式基础
下一篇: ExtJs 中 FormPanel 的数据加载和提交
小威
博客等级 码龄16年 27粉丝 31原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值