2017-02-18 23 views
0

各フィールドに2つの異なるタイプのアダプタを使用したいと思いますが、これはGSON 2.7を使用しています。同じ名前の複数の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; 
} 

どのようにこのエラーを回避するには、「クラスは、複数のJSONフィールド名前付きの型を宣言しますか」?私はtransientを使ってみましたが、うまくいきませんでした。

+0

問題は、 'Car'の型の動作をオーバーライドしたいと思うように見えます。これを実現するには、型フィールドのアクセサメソッドの注釈を使用できます。 – James

+0

少し詳しく教えてもらえますか? –

+0

あなたのjsonを変えるのはどうですか?上記のあなたのjsonのような悪い練習です。 –

答えて

1

エラーが示すように、フィールドのシリアル化に使用される名前のインスタンスを重複させることはできません。

しかし、あなたは2つの別々のフィールドを定義しようとしているのではなく、あなたのCarクラスにtypeのより具体的な実装を作成しようとしています。

は残念ながら、extendsを使用することにより、あなたはVehicle抽象クラスではなくtypeの特定のインスタンスを実行する上に追加されているので、あなたは、継承されたフィールドの定義を変更することはできません。あなたはカップルのオプションを持っているよう

したがって、それが見えます:スーパークラスから継承されたよう

  • ドロップCarType完全に、そしてちょうどString typeを使用しています。 CarTypeがあなたの実装に重要な場合

  • 、あなたはVehicleType vehicleTypeString typeを変更することができ、まだCarサブクラスから重複したフィールドを削除し、VehicleTypeからCarType継承を持っています。

これは、あなただけの一般的なTypeAdapter.classを作成することは可能な解決策である場合ので、このオプションはのみ動作1 @JsonAdapterを持っているだろうことを意味します。

  • あなたが本当にフィールドを再定義する必要がある場合、あなたはより具体的な範囲内で再定義/シャドウできるように、インターフェイスにVehicleを有効にする必要があります。これがあなたのアプリケーションで実行可能かどうかは確かではありません。
関連する問題