Использовать десериализатор. Примерно так:
public class BookDeserializer implements JsonDeserializer<Book> {
@Override
public Book deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context)
throws JsonParseException {
final JsonObject jsonObject = json.getAsJsonObject();
final String title = jsonObject.get("title").getAsString();
JsonElement metaElement = jsonObject.get("metadata");
final String author = metaElement.get("author").getAsString();
final Book book = new Book();
book.setTitle(title);
book.setAuthor(author);
return book;
}
}
Как это использовать:
sGson = new GsonBuilder()
.registerTypeAdapter(Book.class, new BookDeserializer())
.create();
Примечание: я предпочитаю использовать Константу вместо жестко закодированных строк, но это только для примера здесь;)