【发布时间】:2014-05-10 16:09:33
【问题描述】:
我为一个包含枚举属性的类写了一个TypeAdapter。这是write 方法,它对枚举值使用标准 GSON 序列化:
@Override
public void write(JsonWriter writer, MyClass object) throws IOException {
if (object == null) {
writer.nullValue();
return;
}
writer.beginObject();
writer.name("type").value(gson.toJson(object.getType())); //this is the enum
writer.endObject();
}
当使用这个TypeAdapter时,生成的JSON包含这个枚举部分:
"type":"\"ENUM_VALUE\""
但是当我在一个包含这个没有 TypeAdapter 的枚举的类上使用 gson.toJson(object) 时,它会产生:
"type":"ENUM_VALUE"
所有Gson 对象都使用标准配置。它在第一个版本中产生相同的结果,无论我是直接测试TypeAdapter 还是使用Gson 并注册它。
为什么会有差异?我想这里不需要转义,所以我想避免它。
有趣的是,反序列化适用于带有TypeAdapter(带有gson.fromJson(reader.nextString()))的两个序列化版本。
我猜这个问题可能会发生,因为gson.toJson(object.getType()) 已经产生了引号:"ENUM_VALUE",并且当使用writer.value(gson.toJson(object.getType()) 将它们添加到JsonWriter 时,它会被转义。但是如何像 GSON 那样正确处理呢?
【问题讨论】:
标签: java serialization gson