2017-02-18 187 views
0

我想爲每個字段使用兩個不同類型的適配器,這是使用GSON 2.7。如何使用多個具有相同名稱的JSON字段

我得到錯誤「類聲明瞭多個JSON領域命名類型」

public abstract class Vehicle 
{ 
    @SerializedName("type") 
    @JsonAdapter(VehicleTypeAdapter.class) 
    protected String type; 
} 
public class Car extends Vehicle 
{ 
    @SerializedName("type") 
    @JsonAdapter(CarTypeAdapter.class) 
    protected CarType carType; 
} 

如何避免這個錯誤?我嘗試使用transient,但它沒有奏效。

+0

問題出現,您想覆蓋'Car'中的類型行爲。您可以在類型字段的訪問器方法中使用註釋來實現此目的。 – James

+0

您能否詳細說明一下? –

+0

如何改變你的JSON?作爲上面的json,這是非常糟糕的做法。 –

回答

1

由於錯誤提示,您不能有用於序列化字段的名稱的重複實例。

但是,它看起來並不像您想要定義兩個單獨的字段,而是您嘗試在Car類中創建更具體的type實現。

不幸的是,通過使用extends添加到Vehicle抽象類,而非實施的type一個具體的實例,所以你不能更改繼承的字段的定義。

因此,它看起來像你有一對夫婦的選擇:

  • CarType乾脆,只是用String type從超類繼承。

  • 如果CarType是你的執行很重要,你可以改變String typeVehicleType vehicleType,並有從VehicleTypeCarType繼承,還是從Car子類刪除重複的領域。

這意味着你只有1 @JsonAdapter所以這個選項,如果創建一個通用的TypeAdapter.class是一個可能的解決方案僅適用。

  • 如果你真的必須重新定義行業,你就必須把Vehicle成一個界面,讓您可以陰影/高更具體的範圍內重新定義。不確定這是否適合您的應用程序。
相關問題