К сожалению, последняя версия Gson (2.0) по-прежнему не имеет встроенной поддержки для простой конфигурации, обеспечивающей полиморфную десериализацию.Таким образом, если нужно использовать Gson (вместо API, который имеет такую встроенную поддержку, как Jackson ) - используя который я опубликовал полные примеры полиморфной десериализации на http://programmerbruce.blogspot.com/2011/05/deserialize-json-with-jackson-into.html),, тогда пользовательскийобработка десериализации необходима.
Для десериализации до полиморфных типов в JSON должно присутствовать что-то, чтобы определить, к какому конкретному типу следует десериализоваться.предназначенный именно для этой цели, где код десериализации выбирает правильный тип на основе значения элемента специального назначения, например:
{"type":"Class1","hello":"Hi!"} --> deserializes to Class1 instance
{"type":"Class2","world":"Earth"} --> deserializes to Class2 instance
Другой подход заключается в том, чтобы просто включить наличие определенного JSONИмена элементов, хотя вместо блоков try-catch, как показано в исходном вопросе, я бы просто использовал операторы if.
См. Gson, выпуск 231 , для получения дополнительной информации по этой теме.как возможная информация о том, когда встроенная полиморфная установка десериализации может быть включена в Gs
Еще один пост на StackOverflow.com с примером полиморфной десериализации с помощью Gson: Полиморфизм с помощью gson