Я десериализую иерархию виджетов с помощью 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)