我需要像这样序列化一个对象:
class A {
int a = 1;
String b = "hello";
boolean isDog = false;
}
进入这样的JSON数组:
[1,"hello",false]
我知道一种(错误的)方法:从对象的字段中创建一个无类型的Collection,然后是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());
但是由于无类型的集合使用,它会产生很多警告。那么有没有办法将对象序列化为任意类型的数组而不会收到任何警告?
答案 0 :(得分:3)
字面意思是“你做错了”。你没有随机数组,你有一个(A
)对象。它与您想要生成的JSON没有 nothing 。
话虽如此,如果你真的想这样做,你可以将自己的Serializer / Deserializer提供给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
,从提供的JSON数组创建一个A
对象。
有关详情,请参阅: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();
...