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`使用技巧的例子中,我们将深入探讨如何利用TypeAdapter来优化数据处理,包括数据免判空、解析后校验以及预处理等关键环节。这些技巧对于处理机器学习中的数据预处理尤其重要。 首先,让...
本文将深入探讨Gson库的使用方法,帮助开发者更高效地在Java中进行JSON操作。 一、Gson简介 Gson库允许将Java对象转换为JSON字符串,反之也可以将JSON文本解析为Java对象。它的设计目标是使JSON序列化和反序列化...
这个"Android Gson使用实例Demo"旨在帮助开发者理解如何在Android应用中有效地使用Gson库来解析和生成JSON。 Gson的核心功能在于将Java对象转换为对应的JSON字符串,以及将JSON字符串反序列化为Java对象。在Android...
下面我们将详细探讨Gson的主要功能和使用方法。 1. **序列化(对象转JSON)**:Gson允许我们将Java对象转换为JSON字符串。例如,如果你有一个User类,你可以通过`Gson().toJson(user)`方法将其转换为JSON字符串。...
下面我们将详细探讨Gson库的使用方法和相关知识点。 首先,我们要理解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Java中,Gson库使得Java对象...
Gson的API文档详细地解释了每个类和方法的功能,帮助开发者更高效地使用Gson。 在实际应用中,Gson广泛应用于网络通信,尤其是Android开发,因为它能方便地处理JSON数据,减少与服务器交互的复杂性。例如,当从...
1. **序列化和反序列化**:Gson提供了`Gson.toJson()`方法将Java对象转换成JSON字符串,同时提供了`Gson.fromJson()`方法将JSON字符串解析成Java对象。它支持基本数据类型、复合类型(如数组、集合、Map)、自定义...
Gson库提供了一系列方法,如`Gson().toJson()`,可以轻松地将Java对象转换成JSON格式的字符串。 3. **反序列化**:反之,将JSON字符串转换回Java对象的过程称为反序列化。Gson库同样提供了相应的功能,例如`Gson()....
1. **Gson基本用法**: - 将Java对象转换为JSON:通过`Gson().toJson(Object obj)`方法,可以将一个Java对象转换为JSON格式的字符串。 - JSON字符串反序列化为Java对象:使用`Gson().fromJson(String json, Class...
在本实例中,我们将深入探讨Gson库的使用方法,包括序列化(将Java对象转换为JSON字符串)和反序列化(将JSON字符串转换回Java对象)。 首先,我们需要在项目中引入Gson库。如果你使用的是Maven,可以在pom.xml文件...
4. **字段注解**:Gson支持使用Java注解来控制哪些字段被序列化或反序列化,例如`@Expose`用于指定字段可见性,`@SerializedName`用于指定JSON字段名。 5. **流处理**:Gson提供了`JsonWriter`和`JsonReader`,可以...
3. **类型适配器(TypeAdapter)**:Gson允许自定义数据类型的序列化和反序列化过程,通过实现`TypeAdapter`接口,可以对特定类型的数据进行特殊处理。 4. **字段命名策略**:Gson支持不同的字段命名策略,比如保持...
通过创建`TypeAdapter`或使用注解,我们可以定制Gson的行为以适应特定的需求。 总的来说,Gson作为Java中强大的JSON处理库,极大地简化了JSON数据与Java对象之间的转换。无论面对简单的键值对还是复杂的JSON结构,...
开发者可以通过查看这个Javadoc来了解Gson的类、接口、方法及其用法,帮助编写代码时理解和参考API,提高开发效率。 3. `gson-2.8.6-sources.jar`:这个文件包含了Gson库的源代码,对于开发者来说,这是一个学习和...
然而,在使用Gson库进行JSON序列化和反序列化时,枚举处理默认方式可能无法满足所有需求。本篇文章将详细探讨如何通过自定义Gson适配器实现枚举类型的统一序列化和反序列化处理,无需预先定义枚举,也无需修改Gson...
- **类型适配器**:如果你需要更精细的控制转换过程,可以实现`TypeAdapter`接口,Gson会使用这些适配器进行特定类型的转换。 - **运行时类型信息**:Gson可以处理运行时的类型信息,允许将JSON转换为未知类型。 - *...
Gson通过`GsonBuilder`构建实例,然后使用`toJson()`方法将Java对象转换为JSON字符串,或者使用`fromJson()`方法将JSON字符串反序列化为Java对象。这个过程涉及到类型适配器(TypeAdapter)和反射机制,使得Gson能够...
这个 JAR 文件是开发者在项目中使用 Gson 功能所必需的,因为它包含了所有 Gson 类和方法的实现。开发者可以将这个 JAR 添加到项目的类路径中,以便在代码中直接引用 Gson 的功能。 Gson 的主要特性包括: 1. **...
当你有一个Java对象并想将其转化为JSON字符串时,可以使用`Gson().toJson()`方法;反之,如果你有一个JSON字符串并想解析成Java对象,可以使用`Gson().fromJson()`方法。 ### JSON字符串转Java对象 以下是一个简单...
5. **ReflectiveTypeAdapterFactory**:这是一个内部使用的工厂类,负责根据目标类型创建合适的TypeAdapter,主要用于处理Java反射的序列化和反序列化。 6. **ExclusionStrategy接口**:该接口定义了在序列化或反...