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.