如何更改Gson解析器的规则?

时间:2012-08-09 14:17:53

标签: android gson

我想更改Gson解析器的规则(google for Android编写的json解析器)。例如,我有类的对象:

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元素:{“i”:4,“type”:“PRIMARY”}。而不是我想得到:{“i”:4,“type”:0},即类型的序数而不是它的名称。

我该怎么做?

TNX。

1 个答案:

答案 0 :(得分:3)

好的,我找到了答案:

为此需要从GsonBuilder创建Gson对象。但在此之前为Enum.class类型的gson构建器注册一个新的类型层次结构适配器,并使用您自己的json序列化器来完成工作。

// 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将完成这项工作!