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万+

工业组态软件Intouch(单机版)入门{第二篇}

第5步:*都装好之后,需要进行测试授权是否生效,测试1:能否正常运行项目和编辑项目(能否编辑项目,取决于你的授权是否包含开发功能,如果只是单一的runtime授权,则只能运行项目,不能编辑项目)。在线第3步:点击第一个框右边的按钮,弹出文件浏览窗口,选中你的XMl授权文件,打开,然后你的授权出现在下方的列表中,勾选你的授权,然后点击Activate,等待几秒,授权就会出现在管理器页面的列表中,并且Status会显示Activated。第1步:软件安装好之后,先要配置好授权服务器。等待几秒,激活完成。

weixin_41571357的博客 1万+

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

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

vistaup的博客 1965

SHP转TXT、TXT转SHP工具(附工具下载链接)

关于TXT,可以选择整个图层生成一个TXT。也可以勾选“每个地块单独存TXT”,然后选择一个字段,根据字段值,给每个地块生成一个TXT文件。支持选择和数据框一样的坐标系,也可以选择一个图层,工具会采用和这个图层一样的坐标系。1、TXT数据支持输入单个或者多个TXT文件,也可以直接选择TXT所在的文件夹。所有的TXT数据都生成到一个矢量数据图层。关于这一行的内容,可以在地块坐标行设置中进行设置。其他:①面节点闭合:勾选,则回到起点。属性描述:可以直接复制粘贴进来,也可以直接修改。也可以改为任意字母。

坐听风雨 4296

模仿学习(Imitation Learning)概述

什么是模仿学习呢?简单来说,模仿学习(Imitation Learning),就是要训练机器能够复制人类的连续动作,进而达到模仿的目的。其实,Imitation Learning的实用性很高,假设今天有一个训练场景,你不知道该怎么定奖励值(reward),但是你可以收集到专家的示范数据(expert demonstration data),你就可以考虑用Imitation Learning这个方法。因此,模仿学习也被寄予很高的期待,成为下一代强人工智能的关键技术。......

qq_22749225的博客 2万+

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

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

Payne Yu的博客 3231

配置 SAP Web Dispatcher 的实战指南:打通 SAP Fiori、SAP Gateway 与前端系统的关键一跳

SAP Web Dispatcher 在 Fiori 架构中扮演关键角色,作为统一入口处理 HTTPS 请求、实现安全代理和流量分发。它将分散在不同系统的访问路径统一收口,解决浏览器同源策略限制,集中管理 HTTPS 终止和客户端信息传递。典型配置中,Web Dispatcher 监听 443 端口,根据路径将 OData 请求转发至 Gateway 系统,静态资源请求送至前端服务器。SSL 相关配置(如 PSE 文件)确保安全通信,而路由规则(wdisp/system_xx)决定请求转发目标。实施时需注意

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

gson TypeAdapter 适配器

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

qq_40813329的博客 2125

ISO2626 --- Item Definition相关项定义

本文并不是针对ISO26262的一个项目,而是针对ISO26262的规范,我们在相关项定义阶段,我们需要做什么,我们的文档需要包含哪些内容的一个描述。

wj博客 909

【深度学习|语义分割之UNet】如何使用ResNet50 作为 U-Net 网络的骨干网络(backbone)并使用预训练的 ResNet50 模型。附代码及解读。

【深度学习|语义分割之UNet】如何使用ResNet50 作为 U-Net 网络的骨干网络(backbone)并使用预训练的 ResNet50 模型。附代码及解读。

985小水博的摸鱼日常 3090

TypeAdapter

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

海阔天空 1679

芒果YOLOv1改进35:主干Backbone篇之MobileViTv3:全网首发最新 MobileViTv3 系列最强改进版本(三)|轻量化Transformer视觉转换器,简单有效地融合了本地全局

芒果YOLOv1改进35:主干Backbone篇之MobileViTv3:全网首发最新 MobileViTv3 系列最强改进版本(三)|轻量化Transformer视觉转换器,简单有效地融合了本地全局

包括YOLOv5、YOLOv7、YOLOv8等模型改进 415

Gson TypeAdapter处理复杂JSON结构

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

时小雨的专栏 858

Keil uVision5 STM32 startup_stm32f10x_md_vl.s error A3906U Malformed via file target not created..

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 2773

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

bit1129的博客 1028

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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

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

Android开发领域创作者 1796

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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、付费专栏及课程。

余额充值