当前位置:首页 > 开发 > 研发管理 > 正文

Gson使用四(TypeAdapter)

发表于: 2015-01-14   作者:eksliang   来源:转载   浏览:
摘要: 转载请出自出处:http://eksliang.iteye.com/blog/2175595 一.概述        Gson的TypeAapter可以理解成自定义序列化和返序列化 二、应用场景举例        例如我们通常去注册时(那些外国网站),会让我们输入firstName,lastName,但是转到我们都

转载请出自出处: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)

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
在Gson的有一个JsonParser类,该类是final类型,它的作用就将json串解析成JsonElement对象。提供了
原文地址:http://www.cnblogs.com/Dentist/p/Mr_Dentist.html Gson拓展包可以很方便的实现在对象与
今天在网上瞎逛的时候发现了一个东西,发出来共享一下,就是GSON了 GSON 是什么,维基百科上的解析
Gson介绍: Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将
过滤不需要的字段: 传递过来的类: /** * 定义了鸟类 */ public class Bird { /** 名字 */ private
Gson是google提供的开放源代码的java类库,主要用途为java对象与json字符串的串行化或者反串行化(
1.List 简单使用 @Test public void testList() { List list = new ArrayList(); list.add("one");
附件有完整代码 登录界面: 登录的Activity: package com.example.knowledgedemo; import org.json.
使用gson解析json,就得 json有一定的格式,要么是一个[],要么是一个{} 若是{},{},{} 外面又没有套[
1. 首先引入GSON类库到Webapp工程 复制到WebContent/WEB-INF/lib下 2. doGet返回JSON protected voi
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号