Json 변환기 Gson의 실례 6 - 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;
	}

	@Override
	public String toString() {
		return "PackageItem [name=" + name + ", size=" + size + ", state="
				+ state + "]";
	}
}

Json Serializer 인터페이스와 json Deserializer 인터페이스를 위한 변환기를 직접 작성합니다.
4
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<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]

Json 변환의 이점 Gson의 실례 1 - 간단한 대상 변환과 일반적인 List 변환(http://blog.csdn.net/lk_blog/article/details/7685169) Json 변환기 Gson의 실례 2 - Gson 메모와 Gson Builder(http://blog.csdn.net/lk_blog/article/details/7685190) Json 변환기 Gson의 실례 3 - 맵 처리(상)(http://blog.csdn.net/lk_blog/article/details/7685210) Json 변환기 Gson의 예 4 - 맵 처리(하)(http://blog.csdn.net/lk_blog/article/details/7685224) Json 변환기 Gson의 실례 5 - 실제 개발에서의 특수 수요 처리(http://blog.csdn.net/lk_blog/article/details/7685237) Json 변환기 Gson의 실례 6 - TypeAdapter 등록 및 Enum 유형 처리(http://blog.csdn.net/lk_blog/article/details/7685347)
인스턴스 코드 다운로드:http://download.csdn.net/detail/lk_blog/4387822

좋은 웹페이지 즐겨찾기