Gson set序列号名称

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; 
    } 
} 

我有传递给序列化器而不是特定的对象,因为这是我的问题所在。有任何想法吗?谢谢!

+0

虽然这听起来有点违反了我的看法,试图达到什么样的改造,你可以尝试编写自定义序列化器。你甚至可以有一个''暂时的字符串名称'字段,以便能够轻松地检查该字段应具有的名称。 – Fred

+0

@Fred所以我应该停止使用SerializedName而不是它初始化一个瞬态字符串名称?你能为我的案子更具体吗? (我是gson&翻新的初学者) – Alphonse

+0

嗯,这只是一个想法,但是。你会摆脱''@ SerializedName''因为它实际上不再有效。你可以在你的gson中添加一个自定义序列化器 - https://google.github.io/gson/apidocs/com/google/gson/JsonSerializer.html - 由于''serialize''方法可以很容易地接收到这个对象在对象中有一个属性,告诉你在序列化过程中使用哪个名称。该属性不应出现在生成的json中,因此您将其标记为“transient”。所有这些都不适用于反序列化......但你只提到了请求部分。 – Fred

如果要设置@SerializedName(“data”),则必须从api响应中获取相同的变量名称。