1

次のようなオブジェクトをシリアル化する必要があります。

class A {
    int a = 1;
    String b = "hello";
    boolean isDog = false;
}

次のように JSON 配列に変換します。

[1,"hello",false]

私はこれを行う 1 つの (間違った) 方法を知っています: オブジェクトのフィールドから型指定されていないコレクションを作成し、それを Gson します:

class A {
    // ...
    Collection forGson() {
        ArrayList col = new ArrayList();
        col.add(a);
        col.add(b);
        col.add(c);
        return col;
    } 
}
new Gson().toJson(new A().forGson());

ただし、型指定されていないコレクションが使用されているため、多くの警告が生成されます。では、警告を受けずにオブジェクトを任意の型の配列にシリアル化する方法はありますか?

4

1 に答える 1

3

これは文字通り「あなたのやり方は間違っている」です。ランダムなものの配列はありません。( A) オブジェクトがあります。作成したい JSON とは何の共通点もありません。

そうは言っても、本当にこれをやりたい場合は、独自のシリアライザー/デシリアライザーを次の場所に提供しますGson

class ASerializer implements JsonSerializer<A>
{

    public JsonElement serialize(A t, Type type, JsonSerializationContext jsc)
    {
        JsonArray ja = new JsonArray();
        ja.add(new JsonPrimitive(t.a));
        ja.add(new JsonPrimitive(t.b));
        ja.add(new JsonPrimitive(t.isDog));
        return ja;
    }

}

JsonDeserializer逆の を作成Aし、提供された JSON 配列からオブジェクトを作成します。

詳細については、 https : //sites.google.com/site/gson/gson-user-guide#TOC-Custom-Serialization-and-Deserializationを参照してください。

次に、それらを使用するようにGsonBuilder指示します。Gson

GsonBuilder builder = new GsonBuilder(); 
builder.registerTypeAdapter(A.class, new ASerializer());
builder.registerTypeAdapter(A.class, new ADeserializer());
Gson gson = builder.create(); 
...
于 2012-12-22T00:32:05.957 に答える