2017-02-18 131 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成一个界面,让您可以阴影/高更具体的范围内重新定义。不确定这是否适合您的应用程序。
相关问题