Gson désérialisation: jeu de champ final

je désérialiser un widget-hiérarchie à l'aide de gson, mais ont de la difficulté de la désérialisation final champs.

Exemple:

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;
}

je suis la désérialisation d'un Écran à l'aide personnalisée deserializer pour WidgetDefinition, illustré ci-dessous. 'nom' Écran est correctement réglé, 'nom' dans AWidget reste nulle.

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;
        }
    }
}

Edit: je me demande si elle doit faire quelque chose avec ça:

Gson 1.7 ne sérialiser la sous-classe des champs dans les éléments d'une collection. 2.0 ajoute cette information supplémentaire.

(https://sites.google.com/site/gson/gson-roadmap)

pourquoi voulez-vous désérialiser un champ final ? final est destiné à déclarer que cela ne changera pas, alors, vraiment, vous semblez être de piratage de votre propre modèle.
Je veux des objets immuables. Je ne suis pas la création de ces objets n'importe où à l'exception de l'analyse de gson, et il n'y a pas besoin de les changer par la suite. L'immuabilité est toujours mieux dans ma compréhension.
yup mais vous pouvez les rendre privés et n'offrent pas de poseurs - qui permettrait d'atteindre le même but?
Presque. Il y a quelques membres, j'ai mis en interne et je tiens à les distinguer en ayant une section finale et un non-dernière section dans mes membres. je me demandais simplement pourquoi gson se comporte comme cela.
Un peu en retard à la fête, mais je suis d'accord avec votre sentiment. C'est un interminable aggravation de moi que Java fournit pas de sérialisation capacité à manipuler des objets immuables lorsqu'ils sont donc essentiels à la simplification d'un multi-modèle de thread.

OriginalL'auteur Fabian Zeindl | 2011-12-02