1

我有一个像这样的对象:

public class Foo{
  public String f1="[{\"jsonField\":\"something\"},{\"jsonField\":\"something\"}]";
}

Gson 会将其序列化为:

{"f1":"[{\"jsonField\":\"something\"},{\"jsonField\":\"something\"}]"}

f1 字段被序列化为字符串。显然,该字段是格式良好的 json 格式字符串。如何将字段序列化为 jso 数组,如下所示:

{"f1":[{"jsonField":"something"},{"jsonField":"something"}]}

PS。出于性能考虑,我不能反序列化然后序列化该字段。

4

1 回答 1

0

Gson 正在将您的字符串字段序列化为字符串。这很正常。但是,如果您的字段是List<String>,Gson 会给您:

{"f1":["jsonField:something","jsonField:something"]}

如果它是一个列表,其中有一个名为的字段,jsonField你会得到你真正想要的。

这是 Gson 序列化对象的隐式方式。如果你不喜欢它,你需要实现你自己的TypeAdapter,并在 builder 中向 Gson 注册它。

GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(MyObject.class, new SomethingGsonAdapter());
Gson gson = builder.create()

你需要定义:

public class SomethingGsonAdapter implements JsonDeserializer<DataItem>, JsonSerializer<DataItem>;
于 2013-04-25T06:57:45.373 回答