kyberorg
@kyberorg

Google GSON: как изменить порядок сериализации полей при наследовании?

Добрый день, Хабраюзеры!


Имеется такая структура наследования POJO-объектов:

public class Reply{
   private int code;
}

public class ConcreteReply extends Reply{
  private String concreteStr;
}



По умолчанию оно сериализуется в такой JSON:
{ "concreteStr":"value", "code":0 }

То есть сначала поля детей, потом родительские.


Каким образом поменять это порядок, чтобы сначала шли родительские поля, а в конце уже добавлялись поля ребенка?


В данном примере рез-т выполнения метода должен быть таким:
{ "code":0, "concreteStr":"value" }
  • Вопрос задан
  • 3724 просмотра
Пригласить эксперта
Ответы на вопрос 3
1. Если ваше приложение зависит от порядка сериализации, то вы делаете ошибку.
2. В Java reflection порядок полей не гарантирован. А значит, и любые инструменты, её использующие, его также не гарантируют без дополнительных телодвижений.
3. Если вам всё же нужен этот костыль, то придётся написать собственный сериализатор.
4. Если GSON не критичен, то можете использовать Jackson вместо него. Там порядок сериализации можно указать с помощью аннотаций.
Ответ написан
@Mort

Можете объяснить критичность порядка сериализованных полей?

Ответ написан
kyberorg
@kyberorg Автор вопроса

На самом деле оно не критично.

Например есть такие объекты:


public class Error{
   private int code;
}

public class ErrorWithTrace extends Error{
  private String trace;
}

будет гораздо лучше, если в случае ErrorWithTrace прийдет такой JSON: {"code":111, "trace":"here very very long stack trace for Java" }

чем такой:

{"trace":"here very very long stack trace for Java","code":111}

Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы