我使用gson反序列化一个小部件层次结构,但是在反序列化最终字段时出现问题。Gson反序列化:设置最终字段
实施例:
public final class Screen{
@Expose
private final List<WidgetDefinition> children = null;
@Expose
private final String name = null;
}
public final class AWidget implements WidgetDefinition {
@Expose
private final String name = null;
}
即时反序列化使用WidgetDefinition自定义串并转换器一个屏幕,如下所示。屏幕中的'名称'设置正确,AWidget中的'名称'保持为空。
final class Deserializer implements JsonDeserializer<WidgetDefinition> {
public WidgetDefinition deserialize(final JsonElement json, final Type type,
final JsonDeserializationContext context) {
JsonObject jsonObject = json.getAsJsonObject();
String typeName = jsonObject.get("type").getAsString();
if (typeName.equals("awidget")) {
return context.deserialize(json, AWidget.class);
} else {
return null;
}
}
}
编辑:我不知道是否有做一些与此:
GSON 1.7在收集元素不会序列化的子类领域。 2.0增加了额外的信息。
(https://sites.google.com/site/gson/gson-roadmap)
为什么要反序列化到最后一个字段?最后的意思是声明这不会改变,所以你真的好像在嘲弄你自己的模型。 – aishwarya
我想要不可变的对象。我不会创建这些对象,除非从gson解析它们,并且之后不需要更改它们。在我的理解中,不变性总是更好。 –
是的,但是你可以让它们变成私人的,并且不提供setter - 这可以达到同样的目的吗? – aishwarya