枚举类型给我们的程序带来了好处,如何用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
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
测试类:
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]