`
eksliang
  • 浏览: 598881 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Gson使用四(TypeAdapter)

阅读更多

转载请出自出处:http://eksliang.iteye.com/blog/2175595

一.概述

       Gson的TypeAapter可以理解成自定义序列化和返序列化

二、应用场景举例

       例如我们通常去注册时(那些外国网站),会让我们输入firstName,lastName,但是转到我们都是国人吗,心想输入进去的fistName,lastName就要以userName:firtName-lastName的格式展现。

参考实例:

Entry实体,用于保存firtName、lastName

package com.ickes.json.daomain;

public class Entry {
	private String firstName;
	private String lastName;
	
	public Entry(String firstName, String lastName) {
		super();
		this.firstName = firstName;
		this.lastName = lastName;
	}
	get()和set()方法省略......!
	@Override
	public String toString() {
		return "Entry [firstName=" + firstName + ", lastName=" + lastName + "]";
	}
}

    自定义EntrySerializer类实现 JsonSerializer、JsonDeserializer接口,用来自定义转换

    JsonSerializer:序列化接口;

    JsonDeserializer:反序列化接口;

    EntrySerializer类代码如下:

   

package com.ickes.json;

import java.lang.reflect.Type;
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;
import com.ickes.json.daomain.Entry;
/**
 * 自定义序列化和反序列化
 * @author Ickes
 *
 */
public class EntrySerializer implements JsonSerializer<Entry>,JsonDeserializer<Entry>{
	/**
	 * 序列化时调用
	 */
	@Override
	public JsonElement serialize(Entry entry, Type typeOfSrc,
			JsonSerializationContext context) {
		if(entry == null){
			return null;
		}
		/*
		 * 看下JsonElement类的实现类,
		 * 他可以将entry转换为不同的类型例如数组,对象;
		 * 我这里的需求是将firtName和lastName转换为firtName-lastName的格式,用下面这个实现类
		 */
		JsonElement json = new JsonPrimitive(entry.getFirstName()+"-"+entry.getLastName());
		return json;
	}
	
	/**
	 * 反序列化时调用
	 */
	@Override
	public Entry deserialize(JsonElement json, Type typeOfT,
			JsonDeserializationContext context) throws JsonParseException {
		String[] names=json.toString().split("-");
		String firstName=names[0];
		String lastName=names[1];
		Entry entry = new Entry(firstName, lastName);
		return entry;
	}


}

  

   测试代码如下:

  

package com.ickes.json;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.ickes.json.daomain.Entry;
import com.ickes.json.daomain.User;

public class EntrySerializerTest {
	public static void main(String[] args) {
		GsonBuilder gsonBuilder = new GsonBuilder();
		//注册适配器
		gsonBuilder.registerTypeAdapter(Entry.class,new EntrySerializer())
		.setPrettyPrinting();//对结果格式化一下
		Gson gson = gsonBuilder.create();
		//我们去注册时,通常名字由两部分组成,fistName,lastName
		Entry entry = new Entry("xia","liang");
		User user = new User();
		user.setUserName(entry);
		user.setUserPwd("xl123");
		user.setAge(24);
		
		//序列化
		String json = gson.toJson(user);
		System.out.println("序列化结果:\n"+json);
		//反序列化
		user=gson.fromJson(json,User.class);
		System.out.println("反序列化结果:\n"+user);
		
	}
}

    返回结果如下:

    

序列化结果:
{
  "userName": "xia-liang",
  "userPwd": "xl123",
  "age": 24
}
反序列化结果:
User [userName=Entry [firstName="xia, lastName=liang"], userPwd=xl123, age=24]

 

 

分享到:
评论

相关推荐

    Gson TypeAdapter使用技巧几例:数据免判空、解析后校验、预处理.zip

    在这个`Gson TypeAdapter`使用技巧的例子中,我们将深入探讨如何利用TypeAdapter来优化数据处理,包括数据免判空、解析后校验以及预处理等关键环节。这些技巧对于处理机器学习中的数据预处理尤其重要。 首先,让...

    Android Gson使用实例Demo

    这个"Android Gson使用实例Demo"旨在帮助开发者理解如何在Android应用中有效地使用Gson库来解析和生成JSON。 Gson的核心功能在于将Java对象转换为对应的JSON字符串,以及将JSON字符串反序列化为Java对象。在Android...

    kson:用于Kotlin数据类的Gson TypeAdapter和Factory生成器

    kson:用于Kotlin数据类的Gson TypeAdapter和Factory生成器

    Gson的三个jar包

    你可以创建一个TypeAdapter,并通过GsonBuilder注册它,这样Gson在序列化或反序列化时会使用这个自定义的转换逻辑。 4. **注解(Annotations)**:Gson支持使用注解来控制序列化和反序列化的行为。例如,`@Expose`...

    googleGson JsonObject json转换包

    包含以下java源文件: ...com.google.gson.TypeAdapter.class com.google.gson.TypeAdapterFactory.class com.google.gson.annotations.Expose.class com.google.gson.annotations.SerializedName.class ...

    gson-2.5.jar

    对于一些复杂或特殊的类型转换,Gson提供了TypeAdapter接口,允许用户自定义数据的序列化和反序列化过程。这在处理自定义日期格式或者复杂的自定义类型时非常有用。 4. **注解支持** Gson 2.5版本中,支持了注解...

    Json,Gson数据生成小例

    4. **类型适配器**: Gson的`TypeAdapter`可以进一步定制序列化和反序列化的行为,对于复杂的对象模型或者特定需求的序列化很有用。 5. **字段忽略**: 使用`@Expose`注解可以指定哪些字段应该被序列化或反序列化,...

    Gson-2.8.2 官方jar包合集【gson-2.8.2.jar,gson-2.8.2-sources.jar】

    - 类型转换:Gson默认能处理基本数据类型和String,对于复杂的数据结构(如自定义对象、数组和集合),需要使用注解(如`@Expose`)或自定义`TypeAdapter`来指导序列化和反序列化。 - JSON命名策略:Gson支持多种...

    使用ajax gson增强用户体验

    4. **自定义序列化和反序列化**:通过实现Gson的TypeAdapter或JsonSerializer、JsonDeserializer接口,可以自定义对象的序列化和反序列化规则。 5. **配置Gson**:GsonBuilder类提供了丰富的配置选项,如设置日期...

    com.google.gson.Gson-2.8.2

    8. **Maven依赖**:对于使用Maven构建项目的开发者,可以在pom.xml文件中添加Gson的依赖,以便在项目中使用。依赖地址通常可以在Maven仓库或官方文档中找到。 9. **性能优化**:Gson 2.8.2版本对内部实现进行了优化...

    我的gson学习例子

    这个“我的gson学习例子”显然是一份关于如何使用Gson进行JSON操作的学习资料。下面我们将详细探讨Gson库的使用方法和相关知识点。 首先,我们要理解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式...

    gson-gson-parent-2.10.1.tar.gz

    3. **类型适配器(TypeAdapter)**:Gson允许自定义数据类型的序列化和反序列化过程,通过实现`TypeAdapter`接口,可以对特定类型的数据进行特殊处理。 4. **字段命名策略**:Gson支持不同的字段命名策略,比如保持...

    maven项目中gson使用方法 (2).pdf

    在Java开发中,Maven项目广泛使用,而Gson库是...同时,Gson还提供了其他高级特性,如类型适配器(TypeAdapter)、字段忽略策略等,以满足更复杂的转换需求。在实际开发中,根据项目的具体需求,可以灵活运用这些功能。

    使用gson解析并生成json数据

    这个资源显然提供了一系列关于如何使用Gson进行JSON处理的例子,使得开发者能够轻松理解和应用Gson的功能。 1. **Gson库介绍** Gson是Google提供的一个开源库,它提供了丰富的API来处理JSON数据。它允许我们把Java...

    Gson解析json数据

    通过创建`TypeAdapter`或使用注解,我们可以定制Gson的行为以适应特定的需求。 总的来说,Gson作为Java中强大的JSON处理库,极大地简化了JSON数据与Java对象之间的转换。无论面对简单的键值对还是复杂的JSON结构,...

    gson-2.8.6.zip

    4. **类型适配器(TypeAdapter)**:Gson允许用户自定义类型适配器,以处理特定类型的序列化和反序列化逻辑,特别是对于复杂或者自定义的Java类型。 5. **字段注解(Field Annotations)**:Gson支持通过在Java字段...

    Gson实例源码下载

    在本实例中,我们将深入探讨Gson库的使用方法,包括序列化(将Java对象转换为JSON字符串)和反序列化(将JSON字符串转换回Java对象)。 首先,我们需要在项目中引入Gson库。如果你使用的是Maven,可以在pom.xml文件...

    Gson 枚举类型的统一序列化/反序列化处理

    然而,在使用Gson库进行JSON序列化和反序列化时,枚举处理默认方式可能无法满足所有需求。本篇文章将详细探讨如何通过自定义Gson适配器实现枚举类型的统一序列化和反序列化处理,无需预先定义枚举,也无需修改Gson...

    Google发布的强大的gson包

    4. **字段注解**:Gson支持使用Java注解来控制哪些字段被序列化或反序列化,例如`@Expose`用于指定字段可见性,`@SerializedName`用于指定JSON字段名。 5. **流处理**:Gson提供了`JsonWriter`和`JsonReader`,可以...

    gson-2.2.4.jar

    - **类型适配器**:如果你需要更精细的控制转换过程,可以实现`TypeAdapter`接口,Gson会使用这些适配器进行特定类型的转换。 - **运行时类型信息**:Gson可以处理运行时的类型信息,允许将JSON转换为未知类型。 - *...

Global site tag (gtag.js) - Google Analytics