将具有json格式字符串的对象序列化为json

时间:2013-04-25 06:44:29

标签: java gson

我有一个像这样的对象:

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。出于性能考虑,我无法反序列化然后序列化该字段。

1 个答案:

答案 0 :(得分:0)

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

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

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

这是Gson序列化对象的隐含方式。如果您不喜欢它,则需要实现自己的TypeAdapter并在构建器中将其注册到Gson。

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

你需要定义:

public class SomethingGsonAdapter implements JsonDeserializer<DataItem>, JsonSerializer<DataItem>;