Десериализация json, поднятие объектов подкласса на верхний уровень вместо вложенных классов - PullRequest
0 голосов
/ 27 сентября 2019

Я десериализирую ответ json от API, у меня есть рабочий код, но единственное, что меня беспокоит, это элементы в классе Object, как я могу полностью исключить класс Object и просто вернуть элементы напрямуюиз класса ListUsers?

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

import java.util.List;

public class ListUsers{

    @SerializedName("meta")
    @Expose
    private Meta meta;
    @SerializedName("objects")
    @Expose
    private List<Objects> objects = null;

    public Meta getMeta() {
        return meta;
    }

    public void setMeta(Meta meta) {
        this.meta = meta;
    }

    public List<Objects> getObjects() {
        return objects;
    }

    public void setObjects(List<Objects> objects) {
        this.objects = objects;
    }

    private class Meta {
        @SerializedName("limit")
        @Expose
        private int limit;
        @SerializedName("offset")
        @Expose
        private int offset;
        @SerializedName("total_count")
        @Expose
        private int totalCount;

        public int getLimit() {
            return limit;
        }

        public void setLimit(int limit) {
            this.limit = limit;
        }

        public int getOffset() {
            return offset;
        }

        public void setOffset(int offset) {
            this.offset = offset;
        }

        public int getTotalCount() {
            return totalCount;
        }

        public void setTotalCount(int totalCount) {
            this.totalCount = totalCount;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (!(o instanceof Meta)) return false;
            Meta meta = (Meta) o;
            return getLimit() == meta.getLimit() &&
                    getOffset() == meta.getOffset() &&
                    getTotalCount() == meta.getTotalCount();
        }

        @Override
        public int hashCode() {
            return java.util.Objects.hash(getLimit(), getOffset(), getTotalCount());
        }

        @Override
        public String toString() {
            return "Meta{" +
                    "limit=" + limit +
                    ", offset=" + offset +
                    ", totalCount=" + totalCount +
                    '}';
        }
    }

    private class Objects {
        @SerializedName("address_one")
        @Expose
        public String addressOne;
        @SerializedName("address_three")
        @Expose
        public String addressThree;
        @SerializedName("address_two")
        @Expose
        public String addressTwo;
        @SerializedName("country_code")
        @Expose
        public String countryCode;
        @SerializedName("cs_domain_id")
        @Expose


        public String getAddressOne() {
            return addressOne;
        }

        public void setAddressOne(String addressOne) {
            this.addressOne = addressOne;
        }

        public String getAddressThree() {
            return addressThree;
        }

        public void setAddressThree(String addressThree) {
            this.addressThree = addressThree;
        }

        public String getAddressTwo() {
            return addressTwo;
        }

        public void setAddressTwo(String addressTwo) {
            this.addressTwo = addressTwo;
        }

        public String getCountryCode() {
            return countryCode;
        }

        public void setCountryCode(String countryCode) {
            this.countryCode = countryCode;
        }
    }
}

1 Ответ

0 голосов
/ 30 сентября 2019

Напишите Адаптер (это ссылка на Википедию) .

  1. Создайте иерархию классов для представления JSON.Успех, это ваш пример источника.
  2. Создайте класс адаптера, который оборачивает ваш класс представления JSON.Это разоблачит материал blam0-blah (в вашем случае, хорошо названный Objects List) - это веселый и творческий способ (возможно, метод getAddressLine1 и тому подобное).

В зависимости от того, какАдаптер будет использоваться, вы можете разобрать List<Objects> в Map<Objects> для более легкого использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...