Как правильно реализовать это через gson.
Есть класс Shop, а есть json который выглядит так.
Чтобы сопоставить поля есть аннотация @SerializedName. А вот как сделать если имя класса не совпадает с именем объекта в JSON? Есть ли какие-либо аннотации. Или делать класс обертку Data?
{
"data": {
"products": [
{
...
}
],
"departments": [
{
...
}
]
}
}
Имя класса не обязательно должно совпадать с именем объекта. На вашем примере:
{
"data": {
...
}
}
Должно соответствовать следующему классу
public class Root {
@SerializedName("data")
private Shop shop;
...
}
Библиотека GSON содержит мощнейший механизм кастомной сериализации/десериализации объектов - дженерик интерфейсы
public interface JsonSerializer<T> {
JsonElement serialize(T var1, Type var2, JsonSerializationContext var3);
}
и
public interface JsonDeserializer<T> {
T deserialize(JsonElement var1, Type var2, JsonDeserializationContext var3) throws JsonParseException;
}
Реализовав их и использовав при создании объекта GSON через билдер GsonBuilder, зарегистрировав адептор к типу класса;
new GsonBuilder().registerTypeAdapter(UrClass.class, new UrClassAdapter()).create()
Вы получите очень гибкий инструмент для всевозможных трансформаций представления вашего класса: от свертки параметров до преобразования типов, в том числе и изменения имён полей класса.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости