我想更改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。
答案 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将完成这项工作!