Gsonの例6-Type Adapterの登録および処理Enumタイプ
3414 ワード
列挙タイプは私たちのプログラムにメリットをもたらし、どのようにGsonでJsonとの相互回転を実現しますか?本文を見てください.
本文は自分でTypeAdapterを書く方法とTypeAdapterを登録する方法とEnumタイプを処理する方法に重点を置いている.
エンティティークラス:
JsonSerializerインタフェースとjsonDeserializerインタフェースを実現するために、変換器を自分で書きます.
テストクラス:
出力結果(stateの対応する列挙タイプがintタイプに変換された結果):
本文は自分で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;
}
@Override
public String toString() {
return "PackageItem [name=" + name + ", size=" + size + ", state="+ state + "]";
}
}
JsonSerializer
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<PackageState>,JsonDeserializer<PackageState> {
// Json , JsonSerializer<PackageState>
@Override
public JsonElement serialize(PackageState state, Type arg1,JsonSerializationContext arg2) {
return new JsonPrimitive(state.ordinal());
}
// json , JsonDeserializer<PackageState>
@Override
public PackageState deserialize(JsonElement json, Type typeOfT,JsonDeserializationContext context) throws JsonParseException {
if (json.getAsInt() < PackageState.values().length)
return PackageState.values()[json.getAsInt()];
return null;
}
}
テストクラス:
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]