`

Gson TypeAdapter用法

    博客分类:
  • java
阅读更多

Gson TypeAdapter用法

实例:写一个TypeAdapter,注册TypeAdapter来处理Enum类型.

 

实体类:

public enum Color {
	RED("红色",1),GREEN("绿色",2),BLANK("白色",3), YELLO("黄色", 4);
	
	private String name;
	private int index;
	
	private Color(String name, int index) {
		this.name = name;
		this.index = index;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getIndex() {
		return index;
	}

	public void setIndex(int index) {
		this.index = index;
	}
	
}

 

import java.util.Date;

public class Flower {
	private String name;
	private String PlaceofOrigin;
	private Color color;
	private Date date;
	
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPlaceofOrigin() {
		return PlaceofOrigin;
	}
	public void setPlaceofOrigin(String placeofOrigin) {
		PlaceofOrigin = placeofOrigin;
	}
	public Color getColor() {
		return color;
	}
	public void setColor(Color color) {
		this.color = color;
	}
	public Date getDate() {
		return date;
	}
	public void setDate(Date date) {
		this.date = date;
	}
	@Override
	public String toString() {
		return "Flower [name=" + name + ", PlaceofOrigin=" + PlaceofOrigin + ", color=" + color + ", date=" + date
				+ "]";
	}
	
}

 

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;

public class EnumSerializer implements JsonSerializer<Color>,JsonDeserializer<Color> {
	JsonPrimitive colorPrimitive;

	public JsonElement serialize(Color color, Type typeOfSrc, JsonSerializationContext context) {
		colorPrimitive = new JsonPrimitive(color.getName());
		return colorPrimitive;
	}
	
	public Color deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
			throws JsonParseException {
		if(json.getAsJsonPrimitive().equals(colorPrimitive)){
			String name = json.getAsJsonPrimitive().getAsString();
		 
			for(int i=0;i<Color.values().length;i++){
				if(Color.values()[i].getName().equals(name)) return Color.values()[i];
			}
			
		}
		
		return null;
	}
	
}

 

测试类:

 

import java.util.Date;
import org.junit.Test;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class TestEnumGson {

	//无注册自定义TyepAdapter
	@Test
	public void testEnum(){
		System.out.println("-----------------无注册自定义TyepAdapter---------------------");
		Flower flower = new Flower();
		flower.setName("Rose");
		flower.setPlaceofOrigin("China");
		flower.setColor(Color.RED);
		flower.setDate(new Date());
		
		Gson gson = new Gson();
		String flowerStr = gson.toJson(flower);
		System.out.println(flowerStr);
		
		Flower flower1 = gson.fromJson(flowerStr, Flower.class);
		System.out.println(flower1);
	}
	
	//注册自定义TyepAdapter
	@Test
	public void testEnumSerializer(){
		System.out.println("-----------------注册自定义TyepAdapter---------------------");
		Flower flower = new Flower();
		flower.setName("Rose");
		flower.setPlaceofOrigin("China");
		flower.setColor(Color.RED);
		flower.setDate(new Date());
		
		GsonBuilder gsonBuiler = new GsonBuilder();
		gsonBuiler.registerTypeAdapter(Color.class, new EnumSerializer());
		
		Gson gson = gsonBuiler
				.setDateFormat("yyyy-MM-dd HH:mm:ss").create();
		String flowerStr = gson.toJson(flower);
		System.out.println(flowerStr);
		
		Flower flower1 = gson.fromJson(flowerStr, Flower.class);
		System.out.println(flower1);
	}
	
}

 

 

结果:

-----------------注册自定义TyepAdapter---------------------
{"name":"Rose","PlaceofOrigin":"China","color":"红色","date":"2016-02-17 10:35:46"}
Flower [name=Rose, PlaceofOrigin=China, color=RED, date=Wed Feb 17 10:35:46 CST 2016]
-----------------无注册自定义TyepAdapter---------------------
{"name":"Rose","PlaceofOrigin":"China","color":"RED","date":"Feb 17, 2016 10:35:46 AM"}
Flower [name=Rose, PlaceofOrigin=China, color=RED, date=Wed Feb 17 10:35:46 CST 2016]

 

PS:  区别看color的值 "红色" 和 "RED", date不一样是因为设置了 gsonBuiler.setDateFormat("yyyy-MM-dd HH:mm:ss")

 

 

参考资料:

Gson官方文档:https://github.com/google/gson/blob/master/UserGuide.md

Gson指南(Gson官方文档中文版):http://www.letiantian.me/2014-05-22-java-gson-json/

Gson进阶(高级用法):

http://itroadmap.sinaapp.com/2015/11/04/gson%E8%BF%9B%E9%98%B6%EF%BC%88%E9%AB%98%E7%BA%A7%E7%94%A8%E6%B3%95%EF%BC%89/
Json转换利器Gson之实例六:http://blog.csdn.net/lk_blog/article/details/7685347

 

 

分享到:
评论

相关推荐

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

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

    Java JSON处理库之Gson的用法详解.rar

    本文将深入探讨Gson库的使用方法,帮助开发者更高效地在Java中进行JSON操作。 一、Gson简介 Gson库允许将Java对象转换为JSON字符串,反之也可以将JSON文本解析为Java对象。它的设计目标是使JSON序列化和反序列化...

    Android Gson使用实例Demo

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

    Gson的三个jar包

    下面我们将详细探讨Gson的主要功能和使用方法。 1. **序列化(对象转JSON)**:Gson允许我们将Java对象转换为JSON字符串。例如,如果你有一个User类,你可以通过`Gson().toJson(user)`方法将其转换为JSON字符串。...

    我的gson学习例子

    下面我们将详细探讨Gson库的使用方法和相关知识点。 首先,我们要理解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Java中,Gson库使得Java对象...

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

    Gson的API文档详细地解释了每个类和方法的功能,帮助开发者更高效地使用Gson。 在实际应用中,Gson广泛应用于网络通信,尤其是Android开发,因为它能方便地处理JSON数据,减少与服务器交互的复杂性。例如,当从...

    com.google.gson.Gson-2.8.2

    1. **序列化和反序列化**:Gson提供了`Gson.toJson()`方法将Java对象转换成JSON字符串,同时提供了`Gson.fromJson()`方法将JSON字符串解析成Java对象。它支持基本数据类型、复合类型(如数组、集合、Map)、自定义...

    gson-2.8.6.zip

    Gson库提供了一系列方法,如`Gson().toJson()`,可以轻松地将Java对象转换成JSON格式的字符串。 3. **反序列化**:反之,将JSON字符串转换回Java对象的过程称为反序列化。Gson库同样提供了相应的功能,例如`Gson()....

    完美解决gson将Integer默认转换成Double的问题

    例如,如果我们有一个Json字符串{"id":20,"name":"test"},使用Gson.fromJson()方法将其转换成Map,Object&gt;时,Gson会将"id"的值从Integer类型转换成Double类型,变成{"id":20.0,"name":"test"}。 解决这个问题的...

    gson-2.8.5.zip

    1. **Gson基本用法**: - 将Java对象转换为JSON:通过`Gson().toJson(Object obj)`方法,可以将一个Java对象转换为JSON格式的字符串。 - JSON字符串反序列化为Java对象:使用`Gson().fromJson(String json, Class...

    Gson实例源码下载

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

    Google发布的强大的gson包

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

    gson-gson-parent-2.10.1.tar.gz

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

    Gson解析json数据

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

    gson2.8.6.zip

    开发者可以通过查看这个Javadoc来了解Gson的类、接口、方法及其用法,帮助编写代码时理解和参考API,提高开发效率。 3. `gson-2.8.6-sources.jar`:这个文件包含了Gson库的源代码,对于开发者来说,这是一个学习和...

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

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

    gson-2.2.4.jar

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

    gson源码.rar

    Gson通过`GsonBuilder`构建实例,然后使用`toJson()`方法将Java对象转换为JSON字符串,或者使用`fromJson()`方法将JSON字符串反序列化为Java对象。这个过程涉及到类型适配器(TypeAdapter)和反射机制,使得Gson能够...

    Google-gson-2.8.2

    这个 JAR 文件是开发者在项目中使用 Gson 功能所必需的,因为它包含了所有 Gson 类和方法的实现。开发者可以将这个 JAR 添加到项目的类路径中,以便在代码中直接引用 Gson 的功能。 Gson 的主要特性包括: 1. **...

    利用Google Gson实现JSON字符串和对象之间相互转换

    当你有一个Java对象并想将其转化为JSON字符串时,可以使用`Gson().toJson()`方法;反之,如果你有一个JSON字符串并想解析成Java对象,可以使用`Gson().fromJson()`方法。 ### JSON字符串转Java对象 以下是一个简单...

Global site tag (gtag.js) - Google Analytics