2

Gsonパーサー(Android用にgoogleが作成した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。

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 に答える