我想为每个字段使用两个不同类型的适配器,这是使用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
,但它没有用。
答案 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
转换为界面,以便您可以在更具体的范围内隐藏/重新定义。不确定这是否适用于您的应用程序。