1

我需要像这样序列化一个对象:

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

像这样进入 JSON 数组:

[1,"hello",false]

我知道一种(错误的)方法来做到这一点:从对象的字段中创建一个无类型的集合,然后 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 回答