Удалить пустые массивы в Gson - PullRequest
0 голосов
/ 13 февраля 2019

Я читаю такие темы, как Android GSON десериализует, удаляет пустые массивы , https://medium.com/@int02h/custom-deserialization-with-gson-1bab538c0bfa, Как вы получаете GSON для пропуска пустых или пустых объектов и пустых массивов и списков? .

Например, у меня есть класс:

data class ViewProfileResponse(
    val success: Int,
    val wallets: List<Wallet>?,
    val contact: Contact?,

    val code: Int,
    val errors: ErrorsResponse?
) {

    data class Contact(
        val countryId: Int,
        val regionId: Int,
        val cityId: Int
    )

    data class Wallet(
        val id: Int,
        val currency: String?,
        val createTime: Int,
        val balance: Float,
        val bonusWallet: BonusWallet?
    ) {

        data class BonusWallet(val id: Int, val balance: Float)
    }

    data class ErrorsResponse(val common: List<String>?)

    class Deserializer : ResponseDeserializable<ViewProfileResponse> {
        override fun deserialize(content: String): ViewProfileResponse? =
            Gson().fromJson(content, ViewProfileResponse::class.java)
    }
}

Как видите, у меня есть сложный класс с подклассами, любой из которых может быть нулевым.Но вместо отправки null или {} в эти поля сервер отправляет [] в формате JSON.

Я имею в виду, вместо "contact": null я получаю "contact": [].

Как написать собственный десериализатор для Gson?Так что пустые массивы могут быть удалены, но другие типы сохраняются.У меня есть десятки таких классов.

1 Ответ

0 голосов
/ 19 февраля 2019

Временное решение основано на https://stackoverflow.com/a/54709501/2914140.

В этом случае десериализатор будет выглядеть так:

class Deserializer : ResponseDeserializable<ViewProfileResponse> {

    private val gson = Gson()
    private val gsonConverter = GsonConverter()

    override fun deserialize(content: String): ViewProfileResponse? =
        gson.fromJson(gsonConverter.cleanJson(content), ViewProfileResponse::class.java)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...