Gson set序列号名称
问题描述:
我正在使用retrofit向我的服务器发出请求。我想为多个请求使用相同的模型,我想用不同的SerializedName发送不同的对象。 我的POJO看起来是这样的:Gson set序列号名称
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;
}
}
我有传递给序列化器而不是特定的对象,因为这是我的问题所在。有任何想法吗?谢谢!
答
如果要设置@SerializedName(“data”),则必须从api响应中获取相同的变量名称。
虽然这听起来有点违反了我的看法,试图达到什么样的改造,你可以尝试编写自定义序列化器。你甚至可以有一个''暂时的字符串名称'字段,以便能够轻松地检查该字段应具有的名称。 – Fred
@Fred所以我应该停止使用SerializedName而不是它初始化一个瞬态字符串名称?你能为我的案子更具体吗? (我是gson&翻新的初学者) – Alphonse
嗯,这只是一个想法,但是。你会摆脱''@ SerializedName''因为它实际上不再有效。你可以在你的gson中添加一个自定义序列化器 - https://google.github.io/gson/apidocs/com/google/gson/JsonSerializer.html - 由于''serialize''方法可以很容易地接收到这个对象在对象中有一个属性,告诉你在序列化过程中使用哪个名称。该属性不应出现在生成的json中,因此您将其标记为“transient”。所有这些都不适用于反序列化......但你只提到了请求部分。 – Fred