`@SerializedName` не десериализовано при использовании`AutoVaule` и `AutoGson`

Я использую AutoValue а также AutoGson а у меня проблемы были @SerializedName не работает, как я ожидал.

У меня есть эта модель:

@AutoValue
@AutoGson(autoClass = AutoValue_ItemResponse.class)
public abstract class ItemResponse {
    public static ItemResponse create(final String stat) {
        return new AutoValue_ItemResponse(stat);
    }
//    public static TypeAdapter<ItemResponse> typeAdapter(Gson gson) {
//        return new AutoValue_ItemResponse.GsonTypeAdapter(gson);
//    }
    @SerializedName("status")
    public abstract String stat();
}

Я регистрирую это TypeAdapterFactory:

@SuppressWarnings("unchecked")
public class CustomTypeAdapterFactory implements TypeAdapterFactory {
    @Override
    public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
        Class<T> rawType = (Class<T>) type.getRawType();
        AutoGson annotation = rawType.getAnnotation(AutoGson.class);
        if (annotation == null) {
                    return null;
        }
        return (TypeAdapter<T>) gson.getAdapter(annotation.autoClass());
    }
}

С учетом вышеизложенного stat значение всегда null,

Теперь, если я раскомментирую код в ItemResponse, это TypeAdapter и вместо того, чтобы зарегистрировать рев как TypeAdapterFactory

@GsonTypeAdapterFactory
public abstract class SampleAdapterFactory implements TypeAdapterFactory {
    public static SampleAdapterFactory create() {
        return new AutoValueGson_SampleAdapterFactory();
    }
}

stat возвращает правильное значение.

Любая идея, почему первый подход не десериализации stat? Благодарю.

0 ответов

Другие вопросы по тегам