На вопрос
Как использовать альтернативное поле в GSON?
ответ лежит в документах, которые я частично скопировал здесь (и, возможно, вы уже знаете всеили часть этого).
По вопросу
Кажется, GSON не поддерживает это.Но, может быть, кто-то знает, почему?
Да, может, какой-нибудь дизайнер Gson мог бы ответить на это.Лично я не вижу причин, по которым он не может поддерживать JSONPath
в этом атрибуте аннотации.В любом случае, я сконцентрируюсь на вопросе в заголовке.
Это просто не то, как @SerializedName.alternate
работает сейчас.Если вы посмотрите на спецификации Gson API :
public abstract String [] alternate
Возвращает: альтернативные имена поля, когда оно десериализовано
(поэтому имена не пути)
Вот пример использования этой аннотации:
public class MyClass {
@SerializedName("name") String a;
@SerializedName(value="name1", alternate={"name2", "name3"}) String b;
и
При десериализации все значения, указанные в аннотации, будут десериализованы в поле.Например:
MyClass target = gson.fromJson("{'name1':'v1'}", MyClass.class);
assertEquals("v1", target.b);
target = gson.fromJson("{'name2':'v2'}", MyClass.class);
assertEquals("v2", target.b);
target = gson.fromJson("{'name3':'v3'}", MyClass.class);
assertEquals("v3", target.b);
Другими словами - при десериализации - он просто отображает поля с разными именами для десериализации в одно и то же поле.Он не отображает поля в альтернативных путях в Json
источнике.Впрочем, это может быть хорошей функцией.
Так что в примере документа API все поля с именем ["name1", "name2", "name3"] будут десериализованы в MyClass
field b
,Чего он не делает - как я понял, - это десериализует любой вложенный объект Json в это аннотированное поле.
В настоящий момент эти два pages
поля кажутся Gson разными объектами.