#android #gson #retrofit2
#Android #gson #retrofit2
Вопрос:
Я использую GSON с модификацией для отправки объекта JSON в теле запроса. Я хочу включить переходные поля в сериализацию, поэтому я вызвал excludeFieldsWithModifiers(Модификатор.СТАТИЧЕСКИЕ), но они по-прежнему не включены в тело запроса JSON.
// Retrofit Initialization
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.excludeFieldsWithoutExposeAnnotation();
gsonBuilder.excludeFieldsWithModifiers(Modifier.STATIC);
retrofitBuilder = new Retrofit.Builder();
retrofitBuilder.baseUrl(BASE_URL);
retrofitBuilder.addConverterFactory(GsonConverterFactory.create(gsonBuilder.create()));
Retrofit retrofit = retrofitBuilder.build();
// Field to be serialized
@Expose(deserialize = false, serialize = true)
@SerializedName("Name")
private transient String name;
Комментарии:
1. Ммм… Весь смысл
transient
ключевого слова заключается в том, чтобы сообщить сериализаторам, что поле не должно быть сериализовано. «Включить переходные поля в сериализацию» — это противоречивое утверждение. Если вы хотите, чтобы поле было сериализовано, удалитеtransient
модификатор. Иначе это не сработает.2. Я использую ключевое слово transient, потому что я сериализую объект и сохраняю его также в файле, и я не хочу, чтобы это поле сериализовалось в этом случае. И согласно этому руководству , метод excludeFieldsWithModifiers(модификатор. СТАТИЧЕСКИЙ) должен исключать переменные только с модификатором «static».
3. Я исправляюсь. Похоже, что ваш код должен работать так, как вы ожидаете. Вам нужно получить некоторую наглядность в процессе сериализации. Я просмотрел Gson, чтобы узнать, как вы можете отлаживать / отслеживать сериализацию, но я ничего не смог найти. Я полагаю, вы могли бы загрузить исходный код и отладить его таким образом, но это звучит болезненно. Извиняюсь за грубость.
Ответ №1:
Используйте ключевое слово transient
transient public Drawable icon;