`

Json转换利器Gson之实例六-注册TypeAdapter及处理Enum类型

阅读更多

枚举类型给我们的程序带来了好处,如何用Gson来实现与Json的互转呢?请看本文.

 

本文重点掌握如何自己写一个TypeAdapter及注册TypeAdapter和处理Enum类型.

 

实体类:

 

 

 

  1. public enum PackageState {  
  2.     PLAY, UPDATE, UPDATING, DOWNLOAD, DOWNLOADING,  
  3. }  

 

  1. public class PackageItem {  
  2.     private String name;  
  3.     private PackageState state;  
  4.     private String size;  
  5.   
  6.     public String getName() {  
  7.         return name;  
  8.     }  
  9.   
  10.     public void setName(String name) {  
  11.         this.name = name;  
  12.     }  
  13.   
  14.     public PackageState getState() {  
  15.         return state;  
  16.     }  
  17.   
  18.     public void setState(PackageState state) {  
  19.         this.state = state;  
  20.     }  
  21.   
  22.     public String getSize() {  
  23.         return size;  
  24.     }  
  25.   
  26.     public void setSize(String size) {  
  27.         this.size = size;  
  28.     }  
  29.   
  30.     @Override  
  31.     public String toString() {  
  32.         return "PackageItem [name=" + name + ", size=" + size + ", state="  
  33.                 + state + "]";  
  34.     }  
  35. }  


自己写一个转换器实现JsonSerializer<T>接口和jsonDeserializer<T>接口:

 

 

  1. mport java.lang.reflect.Type;  
  2.   
  3. import com.google.gson.JsonDeserializationContext;  
  4. import com.google.gson.JsonDeserializer;  
  5. import com.google.gson.JsonElement;  
  6. import com.google.gson.JsonParseException;  
  7. import com.google.gson.JsonPrimitive;  
  8. import com.google.gson.JsonSerializationContext;  
  9. import com.google.gson.JsonSerializer;  
  10.   
  11. public class EnumSerializer implements JsonSerializer<PackageState>,  
  12.         JsonDeserializer<PackageState> {  
  13.   
  14.     // 对象转为Json时调用,实现JsonSerializer<PackageState>接口  
  15.     @Override  
  16.     public JsonElement serialize(PackageState state, Type arg1,  
  17.             JsonSerializationContext arg2) {  
  18.         return new JsonPrimitive(state.ordinal());  
  19.     }  
  20.   
  21.     // json转为对象时调用,实现JsonDeserializer<PackageState>接口  
  22.     @Override  
  23.     public PackageState deserialize(JsonElement json, Type typeOfT,  
  24.             JsonDeserializationContext context) throws JsonParseException {  
  25.         if (json.getAsInt() < PackageState.values().length)  
  26.             return PackageState.values()[json.getAsInt()];  
  27.         return null;  
  28.     }  
  29.   
  30. }  

测试类:

  1. import com.google.gson.Gson;  
  2. import com.google.gson.GsonBuilder;  
  3.   
  4. public class GsonTest6 {  
  5.   
  6.     public static void main(String[] args) {  
  7.         GsonBuilder gsonBuilder = new GsonBuilder();  
  8.         gsonBuilder.registerTypeAdapter(PackageState.class,  
  9.                 new EnumSerializer());  
  10.         Gson gson = gsonBuilder.create();  
  11.         PackageItem item = new PackageItem();  
  12.         item.setName("item_name");  
  13.         item.setSize("500M");  
  14.         item.setState(PackageState.UPDATING);// 这个 state是枚举值  
  15.   
  16.         String s = gson.toJson(item);  
  17.         System.out.println(s);  
  18.   
  19.         System.out.println("--------------------------------");  
  20.   
  21.         PackageItem retItem = gson.fromJson(s, PackageItem.class);  
  22.         System.out.println(retItem);  
  23.     }  
  24. }  

 

 

输出结果(结果中已经将state的对应枚举类型转为了int类型):

 

 

  1. {"name":"item_name","state":2,"size":"500M"}  
  2. --------------------------------  
  3. PackageItem [name=item_name, size=500M, state=UPDATING]  

 

 

分享到:
评论

相关推荐

    Json转换利器Gson实例代码

    Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。...Json转换利器Gson之实例六-注册TypeAdapter及处理Enum类型 (http://blog.csdn.net/lk_blog/article/details/7685347)

    Json转换利器Gson实例代码,java对象或者list转换为json字符串

    Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。 java对象或者list转换为json字符串

    gson 2.3.1 json转换利器

    Gson 2.3.1作为一款高效的JSON转换工具,其简洁的API和强大的功能使得在Java和Android项目中处理JSON数据变得简单。通过理解和熟练掌握Gson的用法,开发者可以更便捷地进行数据交换和存储,提升项目的开发效率。在...

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

    此外,Gson还支持复杂的类型转换,例如泛型、自定义序列化和反序列化逻辑、枚举类型等。同时,对于那些不希望出现在JSON输出中的字段,可以通过`@Expose`和`@SerializedName`注解进行控制。在处理日期和时间时,可以...

    Gson解析复杂Json实例,超简单

    本教程将深入探讨如何使用Gson库解析复杂的JSON实例,让你只需寥寥几行代码就能轻松处理JSON解析问题。 ### Gson库简介 Gson库的核心功能是将Java对象(如自定义类)转换为JSON字符串,反之亦然。这个库非常直观,...

    GSON JAR包 最新包和历史包 gson-2.10.1

    gson-2.10.1.jar gson-2.10.jar gson-2.9.1.jar gson-2.9.0.jar gson-2.8.9.jar gson-2.8.8.jar gson-2.8.7.jar gson-2.8.6.jar gson-2.8.5.jar gson-2.8.4.jar gson-2.8.3.jar gson-2.8.2.jar gson-2.8.1.jar gson-...

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

    Gson是Google开发的一款强大的Java库,用于将Java对象转换为JSON...总之,Gson-2.8.2是JSON处理的得力工具,它提供了丰富的功能,易于使用,并且拥有源码和详细的文档支持,可以帮助开发者更高效地进行数据交换和处理。

    Json转换利器Gson

    NULL 博文链接:https://bdk82924.iteye.com/blog/1988977

    Google的json数据转换的jar包gson-2.2.4

    6. **枚举支持**:Gson能够自动处理枚举类型,将其转换为JSON字符串和从JSON恢复。 7. **运行时类型信息**:Gson可以保留原始类型信息,即使在反序列化时类型不明确也能正确处理。 8. **性能优化**:Gson经过精心...

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

    Gson-2.8.0的官方jar包合集【gson-2.8.0.jar,gson-2.8.0-sources.jar,gson-2.8.0-javadoc.jar】,JSON解析类库Gson库的jar包。

    gson-2.8.0-API文档-中文版.zip

    赠送jar包:gson-2.8.0.jar; 赠送原API文档:gson-2.8.0-javadoc.jar; 赠送源代码:gson-2.8.0-sources.jar; 赠送Maven依赖信息文件:gson-2.8.0.pom; 包含翻译后的API文档:gson-2.8.0-javadoc-API文档-中文...

    gson-2.8.6-API文档-中文版.zip

    赠送jar包:gson-2.8.6.jar; 赠送原API文档:gson-2.8.6-javadoc.jar; 赠送源代码:gson-2.8.6-sources.jar; 赠送Maven依赖信息文件:gson-2.8.6.pom; 包含翻译后的API文档:gson-2.8.6-javadoc-API文档-中文...

    gson-gson-parent-2.10.1.tar.gz

    `gson-gson-parent-2.10.1.tar.gz`是一个压缩包,包含了Gson库的版本2.10.1,它通常用于Java项目中处理JSON数据的场景。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也...

    Java对象和JSON互转换利器-Gson

    Gson作为Java对象和JSON转换的利器,通过其强大的功能和简洁的API,简化了开发者在JSON数据处理中的工作。无论是基本类型还是复杂对象,Gson都能轻松应对,同时提供了自定义转换的灵活性,使得在实际项目中更加...

    gson-2.8.9-API文档-中文版.zip

    赠送jar包:gson-2.8.9.jar; 赠送原API文档:gson-2.8.9-javadoc.jar; 赠送源代码:gson-2.8.9-sources.jar; 赠送Maven依赖信息文件:gson-2.8.9.pom; 包含翻译后的API文档:gson-2.8.9-javadoc-API文档-中文...

    gson-2.8-6.jar

    由于其简单易用且功能强大,Gson成为了Java开发者处理JSON的首选库之一。 总结起来,Gson是一个强大的JSON库,提供了从Java对象到JSON和反之的转换功能。这个压缩包中包含的不同版本展示了Gson随着时间推移的演进,...

    gson-2.3.jar(含gson-2.3-javadoc.jar和gson-2.3-sources.jar)

    在实际开发中,可以将`gson-2.3.jar`添加到项目的类路径,使用`gson-2.3-javadoc.jar`作为参考,而`gson-2.3-sources.jar`则有助于深入学习和调试。这三部分共同构成了Gson库的完整学习和开发环境,方便开发者在处理...

    json+gson用到的jar

    Gson的优势在于其强大的类型安全性和自动序列化/反序列化功能,使得开发者无需手动编写繁琐的JSON解析代码。 在Java开发中,为了使用JSON和Gson,你需要包含以下jar包: 1. **json.jar**:这是处理JSON的基本库,...

    google-json-gson-master.zip

    3. **类型适配器(TypeAdapter)**:Gson允许自定义类型适配器,以处理特定类型的序列化和反序列化,如日期、自定义类等,确保数据转换的准确性和灵活性。 4. **复杂对象处理**:Gson能处理嵌套的对象和数组,以及...

    Java四大json库gson+fastjson+jackson+json-lib

    为了方便地处理JSON数据,Java社区提供了多个优秀的JSON库,包括Gson、Fastjson、Jackson和json-lib。这四大JSON库各有特点,适应不同的使用场景。 1. Gson: Gson是Google提供的一个开源库,它能够将Java对象转换...

Global site tag (gtag.js) - Google Analytics