gpt4 book ai didi

java - 使用 Gson 将对象序列化为任意 JSON 数组而不会收到警告

转载 作者:行者123 更新时间:2023-11-29 05:51:30 25 4
gpt4 key购买 nike

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

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());

但是由于使用了非类型化集合,它会产生很多警告。那么有什么方法可以在不收到任何警告的情况下将对象序列化为任意类型的数组吗?

最佳答案

这实际上是“你做错了”。您没有随机数组,您有一个 (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,从提供的 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();
...

关于java - 使用 Gson 将对象序列化为任意 JSON 数组而不会收到警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13723732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com