Gson deserialise - избегайте класса-обёртки - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь десериализовать следующий JSON с помощью Gson в Kotlin.

{
  "things": [
    {
      "name": "Thing1"
    },
    {
      "name": "Thing2"
    }
  }
}

Теперь у меня есть 2 класса, в которые я десериализуюсь;

  1. ThingWrapper - имеет одно свойство, «Вещи», который является списком
  2. Вещь - имеет имя свойства

В моем служении я просто возвращаю List<Thing> из «вещей» и никогда не разоблачаю ThingWrapper.

fun getThings(): List<Thing> {
   return Gson().fromJson(json, ThingWrapper::class.java).things
}

У меня вопрос: могу ли я использовать Gson для десериализации таким образом, чтобы можно было полностью избежать необходимости в классе ThingWrapper?

Заранее спасибо, John

1 Ответ

0 голосов
/ 29 октября 2018

Если вы хотите исключить класс Wrapper, вы можете использовать класс JSONObject, чтобы проанализировать объект, а затем извлечь из него массив JSON.

val things: List<Thing> = Gson().fromJson(
            JSONObject(json).getJSONArray("things").toString(),
            object : TypeToken<List<Thing>>() {}.type)
Log.i("output", things.toString())

I / вывод: [Thing (имя = Thing1), Thing (имя = Thing2)]

Это сработало для меня.

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