2012-06-01 83 views
4

我有一類這樣的:如何在擴展類改變@SerializedName,從GSON,屬性的

class A { 
    @Expose 
    @SerializedName("a_id") 
    private String id; 
} 

現在我想創建一個擴展B類,但是,在B,我想要將ID的序列化名稱更改爲「b_id」。有沒有辦法做到這一點?

+0

這不會破壞班級合同嗎? B類對象將是B類的一個實例(由於繼承),但不會提供A類對象提供的ID字段... – SJuan76

+0

我理解你的想法,但我不這麼認爲,因爲註釋會改變屬性的特性,就像getter和setters一樣,所以理論上我可以在一個小孩班上做到這一點。 – tpcordeiro

+0

例如,Hibernate允許我[Hibernate繼承](http://viralpatel.net/blogs/2011/12/hibernate-inheritance-table-per-concrete-class-annotation-xml-mapping.html)請參閱「Hibernate繼承:Annotation Mapping「,其中@Inheritance發揮了作用。我只想知道GSON是否具有相同的功能。 – tpcordeiro

回答

0

申請@SerializedName( 「B_ID」),以在B中的設定器

類B { 私人字符串ID;

@SerializedName("b_id") 
private void setId(String id); 

}

0

從GSON版本2.4可以使用備用名稱。你的情況,你可以做這樣的:

class A { 
    @Expose 
    @SerializedName(value = "a_id", alternate="b_id") 
    private String id; 
} 

的格式是這樣的:

@SerializedName(value="name1", alternate={"name2", "name3"}) 

更多信息here