【发布时间】:2016-01-18 12:04:11
【问题描述】:
我有一个 POJO,其中包含一个已经序列化 JSON 的字符串字段。性能是这里的关键,所以我想避免解析它然后重新序列化它。
public class SomeObject {
String someString = "";
String jsonString = "{\"one\":4, \"two\":\"hello\"}";
long someLong = 4;
}
目前 GSON 将其序列化如下:
{ "someString":"", "jsonString":"{\"one\":4, \"two\":\"hello\"}", "someLong":4 }
我写了一个 JsonSerializer/Deserializer 希望使用 @JsonAdapter 注解,但它只支持 TypeAdapter 或 TypeAdapterFactory。
public class JsonStringTypeAdapter implements JsonSerializer<String>, JsonDeserializer<String> {
@Override
public JsonElement serialize(String t, Type type, JsonSerializationContext jsc) {
return new JsonParser().parse(t).getAsJsonObject();
}
@Override
public String deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) throws JsonParseException {
return je.getAsString();
}
@Override
public void write(JsonWriter writer, String t) throws IOException {
writer.jsonValue(t);
}
}
所以我编写了以下简单的 TypeAdapter,它非常适合序列化,但我不知道如何在 TypeAdapter 中将 Json 对象反序列化为 String。
public class JsonStringTypeAdapter extends TypeAdapter<String> {
@Override
public void write(JsonWriter writer, String t) throws IOException {
writer.jsonValue(t);
}
@Override
public String read(JsonReader reader) throws IOException {
throw new UnsupportedOperationException("Not supported yet.");
}
}
我知道 Jackson 对此有注释。用 GSON 做这件事有什么想法吗?
【问题讨论】:
-
您对 POJO 的序列化有何期待??
-
{ "someString":"", "jsonString":{"one":4, "two":"hello"}, "someLong":4 } -
如果你用“"”替换转义的引号字符,它会做你想要的吗?您也可以尝试 \u0022 Unicode 转义序列。不是我知道的答案,只是建议替代方案。
-
它仍然会将其括在引号中并将其序列化为字符串。它需要序列化
string -> json object和反序列化json object -> string我序列化工作得很好,但我被反序列化卡住了。