热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【转】Json转换利器Gson之实例五注册TypeAdapter及处理Enum类型

枚举类型给我们的程序带来了好处,如何用Gson来实现与Json的互转呢?请看本文.本文重点掌握如何自己写一个TypeAdapter及注册TypeAdapter和处理Enum类型.实

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

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

实体类:

public enum PackageState {PLAY, UPDATE, UPDATING, DOWNLOAD, DOWNLOADING,
}

 

public class PackageItem {private String name;private PackageState state;private String size;public String getName() {return name;}public void setName(String name) {this.name = name;}public PackageState getState() {return state;}public void setState(PackageState state) {this.state = state;}public String getSize() {return size;}public void setSize(String size) {this.size = size;}@Overridepublic String toString() {return "PackageItem [name=" + name + ", size=" + size + ", state="+ state + "]";}
}

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

mport 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,JsonDeserializer {// 对象转为Json时调用,实现JsonSerializer接口@Overridepublic JsonElement serialize(PackageState state, Type arg1,JsonSerializationContext arg2) {return new JsonPrimitive(state.ordinal());}// json转为对象时调用,实现JsonDeserializer接口@Overridepublic PackageState deserialize(JsonElement json, Type typeOfT,JsonDeserializationContext context) throws JsonParseException {if (json.getAsInt()

 测试类:

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;public class GsonTest6 {public static void main(String[] args) {GsonBuilder gsonBuilder = new GsonBuilder();gsonBuilder.registerTypeAdapter(PackageState.class,new EnumSerializer());Gson gson = gsonBuilder.create();PackageItem item = new PackageItem();item.setName("item_name");item.setSize("500M");item.setState(PackageState.UPDATING);// 这个 state是枚举值String s = gson.toJson(item);System.out.println(s);System.out.println("--------------------------------");PackageItem retItem = gson.fromJson(s, PackageItem.class);System.out.println(retItem);}
}

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

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

  

转:https://www.cnblogs.com/daocaowu/p/3342000.html



推荐阅读
author-avatar
mobiledu2502899727
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有