欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Gson TypeAdapter用法

程序员文章站 2022-04-04 12:31:04
...

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