使用RuntimeTypeAdapterFactory

时间:2018-12-01 21:55:22

标签: kotlin gson

我正在尝试修改GSON示例RuntimeTypeAdapterFactory:

https://github.com/google/gson/blob/master/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java

我有一个POJO,其中包含其他pojo的列表

class Definition(
        @SerializedName("name") val name: String,
        @SerializedName("fields") var fields: List<Field>
)

class Field(
        @SerializedName("name") val name: String,
        @SerializedName("type") val type: String,
)

class TextField(
        val name: String,
        val type: String,
        @SerializedName("value") val value: String
): Field(name, type)

class DateField(
        val name: String,
        val type: String,
        @SerializedName("value") val value: Date
): Field(name, type)

如果将所有类型映射到类,则GSON的RuntimeTypeAdapterFactory可以很好地工作。但是,我有一些类型只是想忽略掉而放到地板上。

即,如果我得到此字段:

{
  type: "ignoreMe"
}

如果未映射任何类型,则提供的工厂将引发异常。

https://github.com/google/gson/blob/master/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java#L227-L230

if (delegate == null) {
  throw new JsonParseException("cannot deserialize " + baseType + " subtype named "
    + label + "; did you forget to register a subtype?");
}

我修改了if语句以针对我的情况返回null:     如果(代表==空){       返回null;     }

但是由于我为某些字段类型返回null的事实,最终我得到一个包含一些null值的列表。

有没有办法告诉TypeAdapter不要将元素添加到字段列表中?

0 个答案:

没有答案