Я пытаюсь изменить пример GSON RuntimeTypeAdapterFactory:
https://github.com/google/gson/blob/master/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java
У меня есть POJO, у которого есть список других pojos
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 GSONпросто замечательно, если вы сопоставляете все типы с классами.Однако у меня есть некоторые типы, которые я хочу просто игнорировать и бросать на пол.
т.е. если я получу это поле:
{
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, чтобы он возвращал ноль для моего случая: if (делегат == нуль) {возвращать ноль;}
Однако тогда я получаю список, в котором есть некоторые нулевые значения, потому что я возвращаю нулевое значение для некоторых типов полей.
Есть ли способ, которым я могупопросить TypeAdapter не добавлять элемент в список полей?