Есть два класса:
public class RegisteredUser {
@Expose
@SerializedName("phoneNumber")
private String phoneNumber;
@Expose
@SerializedName("firebase")
private Firebase firebase;
public RegisteredUser(String phoneNumber, Firebase firebase) {
this.phoneNumber = phoneNumber;
this.firebase = firebase;
}
public String getPhoneNumber() {
return phoneNumber;
}
public Firebase getFirebase() {
return firebase;
}
public static class Firebase {
@Expose
@SerializedName("uid")
private String uid;
@Expose
@SerializedName("provoiderId")
private String providerId;
public Firebase(String uid, String providerId) {
this.uid = uid;
this.providerId = providerId;
}
public String getUid() {
return uid;
}
public String getProviderId() {
return providerId;
}
}
И код, который парсит все это в json
Gson gson = new Gson();
gson.toJson(mRegisteredUser);
По идеи код должен выводить результат:
{
"phoneNumber": "+380000000000",
"firebase": {
"provoiderId": "000",
"uid": "00000"
}
}
Но выводит:
{
"firebase": {
"provoiderId": "000",
"uid": "00000"
},
"phoneNumber": "+380000000000"
}
Почему не парсит в том порядке, который я задаю в классе? И как исправить?
Для JSON формата порядок не важен, поэтому GSON не гарантирует что порядок объектов в строке JSON будет таким же, как порядок полей в Java классе.
Если Вам, все же необходимо, записывать в определенном порядке, то вы можете написать свой адаптер - https://github.com/google/gson/blob/master/UserGuide.md#TOC-Custom-Serialization-and-Deserialization
GSon не поддерживает порядок парсинга/следования полей (а иногда правда хочется).
Уже давно висит issue, но разработчики прохладно игнорят его отсылая к кастомному адаптеру:
Custom type adapters exist to handle this
В то же время Jackson - поддерживает через аннотацию @JsonPropertyOrder
можно явно задавать порядок полей
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Хочу чтобы из места обозначенного комментарием //это место "перекинуло" в цикл обозначенного //этот цикл, при том, что они находятся в разных...
Проект с поддержкой springMVCВ запросе подчеркивает FROM('FROM' unexpected)