Адаптеры @FromJson
/ @ToJson
пока не поддерживают универсальные элементы, такие как List.Они соответствуют непосредственно по типу.Вам потребуется полностью выписанный JsonAdapter.Factory.Не забудьте добавить NullToEmptyListJsonAdapter.FACTORY
к вашему Moshi.Builder
.
final class NullToEmptyListJsonAdapter extends JsonAdapter<List<?>> {
static final Factory FACTORY = new Factory() {
@Nullable @Override
public JsonAdapter<?> create(Type type, Set<? extends Annotation> annotations, Moshi moshi) {
if (!annotations.isEmpty()) {
return null;
}
if (Types.getRawType(type) != List.class) {
return null;
}
JsonAdapter<List<?>> objectJsonAdapter = moshi.nextAdapter(this, type, annotations);
return new NullToEmptyListJsonAdapter(objectJsonAdapter);
}
};
final JsonAdapter<List<?>> delegate;
NullToEmptyListJsonAdapter(JsonAdapter<List<?>> delegate) {
this.delegate = delegate;
}
@Override public List<?> fromJson(JsonReader reader) throws IOException {
if (reader.peek() == JsonReader.Token.NULL) {
reader.skipValue();
return emptyList();
}
return delegate.fromJson(reader);
}
@Override public void toJson(JsonWriter writer, @Nullable List<?> value) throws IOException {
if (value == null) {
throw new IllegalStateException("Wrap JsonAdapter with .nullSafe().");
}
delegate.toJson(writer, value);
}
}