如何使用具有相同名称的多个JSON字段

时间:2017-02-18 01:39:18

标签: java android json gson

我想为每个字段使用两个不同类型的适配器,这是使用GSON 2.7。

我收到错误“class声明了多个名为type的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,但它没有用。

1 个答案:

答案 0 :(得分:1)

如错误所示,您不能拥有用于序列化字段的名称的重复实例。

但是,您似乎并没有尝试定义两个单独的字段,而是在尝试在{{1}中创建更具体的type实现}。class。

不幸的是,通过使用Car,你添加到 extends抽象类,而不是实现Vehicle的特定实例,所以你可以' t更改继承字段的定义。

因此,看起来你有两个选择:

  • 完全删除type,只使用继承自超类的CarType

  • 如果String type对您的实施非常重要,您可以将CarType更改为String type,并VehicleType vehicleType继承CarType,但仍会删除来自VehicleType子类的重复字段。

这意味着您只有1 Car,因此只有在创建通用@JsonAdapter是可能的解决方案时,此选项才有效。

  • 如果您真的必须重新定义该字段,则必须将TypeAdapter.class转换为界面,以便您可以在更具体的范围内隐藏/重新定义。不确定这是否适用于您的应用程序。