Gson set SerializedName

Я использую модификацию для отправки запросов на мой сервер. Я пытаюсь использовать одну и ту же модель для нескольких запросов, и я хочу отправить разные объекты с разными SerializedName. Мое пижо выглядит так:

public class BaseModel<T> implements Serializable {
    @SerializedName("success")
    @Expose
    private boolean succcess;
    @SerializedName("data")
    @Expose private T data;

    public boolean isSucccess() {
        return succcess;
    }

    public void setSucccess(boolean succcess) {
        this.succcess = succcess;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}

Как я могу установить мое @SerializedName("данные") динамически? Спасибо всем за ваше время!

Пример кода:

public class BaseRequestModel<T> implements Serializable {
    @SerializedName("success")
    @Expose
    private boolean success;

    @Expose private T data;

    public boolean isSucccess() {
        return success;
    }

    public void setSucccess(boolean succcess) {
        this.success = succcess;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}

Один из объектов, которые я отправляю в BaseModel (как данные T):

public class User implements Serializable {

    transient String requestName = "user";

    @SerializedName("id")
    @Expose
    private int id;

    @SerializedName("owner_id")
    @Expose private int ownerId;

    @SerializedName("first_name")
    @Expose private String firstName;

    @SerializedName("middle_name")
    @Expose private String middleName;

    @SerializedName("last_name")
    @Expose private String lastName;

    @SerializedName("username")
    @Expose private String username;

    public String getRequestName() {
        return requestName;
    }

    public void setRequestName(String requestName) {
        this.requestName = requestName;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getOwnerId() {
        return ownerId;
    }

    public void setOwnerId(int ownerId) {
        this.ownerId = ownerId;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getMiddleName() {
        return middleName;
    }

    public void setMiddleName(String middleName) {
        this.middleName = middleName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

}

Мой кастомный сериализатор:

public class BaseRequestCustomSerializer<T> implements JsonSerializer<User> {
    @Override
    public JsonElement serialize(User src, Type typeOfSrc, JsonSerializationContext context) {
        src.getRequestName();
        return null;
    }
}

Я должен перейти к сериализатору, а не к конкретному объекту, так как в этом вся моя проблема. Есть идеи? Спасибо!

1 ответ

Если вы хотите установить @SerializedName("data"), тогда вы должны получить то же имя переменной из ответа API.

Другие вопросы по тегам