Избегайте списка с нулевыми элементами при использовании RuntimeTypeAdapterFactory - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь изменить пример 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 не добавлять элемент в список полей?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...