2

我想更改 Gson 解析器的规则(谷歌为 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},即类型的序数而不是它的名称。

我怎样才能做到这一点?

肿瘤坏死因子。

4

1 回答 1

3

好的,我找到了答案:

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

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

于 2012-08-09T15:31:05.500 回答