Vous écririez un désérialiseur personnalisé qui renvoie l'objet incorporé.
Disons que votre JSON est:
{
    "status":"OK",
    "reason":"some reason",
    "content" : 
    {
        "foo": 123,
        "bar": "some value"
    }
}
Vous auriez alors un ContentPOJO:
class Content
{
    public int foo;
    public String bar;
}
Ensuite, vous écrivez un désérialiseur:
class MyDeserializer implements JsonDeserializer<Content>
{
    @Override
    public Content deserialize(JsonElement je, Type type, JsonDeserializationContext jdc)
        throws JsonParseException
    {
        // Get the "content" element from the parsed JSON
        JsonElement content = je.getAsJsonObject().get("content");
        // Deserialize it. You use a new instance of Gson to avoid infinite recursion
        // to this deserializer
        return new Gson().fromJson(content, Content.class);
    }
}
Maintenant, si vous construisez un Gsonwith GsonBuilderet enregistrez le désérialiseur:
Gson gson = 
    new GsonBuilder()
        .registerTypeAdapter(Content.class, new MyDeserializer())
        .create();
Vous pouvez désérialiser votre JSON directement dans votre Content:
Content c = gson.fromJson(myJson, Content.class);
Modifier pour ajouter à partir des commentaires: 
Si vous avez différents types de messages mais qu'ils ont tous le champ «contenu», vous pouvez rendre le désérialiseur générique en faisant:
class MyDeserializer<T> implements JsonDeserializer<T>
{
    @Override
    public T deserialize(JsonElement je, Type type, JsonDeserializationContext jdc)
        throws JsonParseException
    {
        // Get the "content" element from the parsed JSON
        JsonElement content = je.getAsJsonObject().get("content");
        // Deserialize it. You use a new instance of Gson to avoid infinite recursion
        // to this deserializer
        return new Gson().fromJson(content, type);
    }
}
Il vous suffit d'enregistrer une instance pour chacun de vos types:
Gson gson = 
    new GsonBuilder()
        .registerTypeAdapter(Content.class, new MyDeserializer<Content>())
        .registerTypeAdapter(DiffContent.class, new MyDeserializer<DiffContent>())
        .create();
Lorsque vous appelez, .fromJson()le type est transporté dans le désérialiseur, il devrait donc fonctionner pour tous vos types.
Et enfin lors de la création d'une instance Retrofit:
Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build();