2012-08-09 20 views
2

我想更改Gson解析器的規則(由Google for Android編寫的json解析器)。比如我有類的對象:如何更改Gson解析器的規則?

enum Type 
{ 
    PRIMARY, 
    SECONDARY 
} 

class A 
{ 
    public int i = 4; 
    public Type type = Type.PRIMARY; 
} 

A a = new A(); 

現在,如果我將通過GSON轉換器,轉換對象:

Gson gson = new Gson(); 
JsonElement json = gson.toJson(a); 

我會得到JSON元素:{「我」:4「型「:「主」}。而不是我想得到:{「我」:4,「類型」:0},即類型的序數,而不是它的名稱。

我該怎麼做?

Tnx。

回答

3

好吧,我找到了答案:

做這件事需要從GsonBuilder創建GSON對象。但在此之前,將爲您的json序列化程序註冊一個用於Enum.class類型的gson builder的新類型層次結構適配器,它將完成這項工作。

// new Json serializer for Enum<?> class 
class ObjectTypeSerializer implements JsonSerializer<Enum<?>> 
{ 
    private static final JsonParser mParser = new JsonParser(); 

    public JsonElement serialize(Enum<?> object_, 
     Type type_, 
     JsonSerializationContext context_) 
    { 
     // that will convert enum object to its ordinal value and convert it to json element 
     return mParser.parse(((Integer)object_.ordinal()).toString()); 
    } 
} 

// creation of gson builder 
GsonBuilder gsonBuilder = new GsonBuilder(); 

// registration of type hierarchy adapter 
gsonBuilder.registerTypeHierarchyAdapter(Enum.class, new ObjectTypeSerializer()); 

// creation gson from builder 
Gson gson = gsonBuilder.create(); 

現在gson會做的工作!