Json 변환기 Gson의 실례 6 - TypeAdapter 등록 및 처리 Enum 유형
3655 단어 enumjsongson인스턴스TypeAdapter
본고는 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
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rails5에서 enum을 사용할 때는 _prefix (접두사) _suffix (접미사)를 사용합시다.Rails5에서 ActiveRecord::Enum를 정의 할 때 _prefix, _suffix라는 무기가 있다는 것을 알고 싶습니다. You can use the :_prefix or :_suffix options ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.