Как создать объект Gson с TypeAdapterFactory, чтобы соответствовать моей модели POKO? - PullRequest
1 голос
/ 09 марта 2019

Мне удалось получить модификацию, работающую со следующим POKO:

data class GifSerialList(var data: List<GifSerial>)
data class GifSerial(var id: String,
                 var title: String,
                 @SerializedName("import_datetime") var importDatetime: String,
                 var user: User?,
                 var images: Image)
data class User(@SerializedName("display_name") var userDisplayName: String)
data class Image(@SerializedName("fixed_height") var fixedHeight: Size)
data class Size(var url: String)

Соответствует следующему json:

{
"data": [
    {
        "id": "oefi3of93jf2f9",
        ...
        "import_datetime": "2014-03-29 13:55:35",
        ...
        "user": {
            ...
            "display_name": "User Display Name",
        },
        "images": {
            ...             
            "fixed_height": {
                "url": "https://giflink.gif",
                ...
            },
            ...
        },
        "title": "GIF Title",
        ...
    },
    {

Со следующим запросом на модернизацию:

@GET("trending")
fun getTrending(@Query("api_key") apiKey: String): Call<GifSerialList>

Я решил сделать это правильно и избежать чудовищности GifSerialList. Я должен использовать TypeAdapterFactory для создания json, соответствующего моему оригинальному POKO:

data class Gif(var id: String,
           var title: String,
           @SerializedName("display_name") var authorDisplayName: String?,
           @SerializedName("import_datetime") var importDateTime: String,
           var url: String) : Parcelable

Вопросы:

Является ли TypeAdapterFactory - читать (входные данные: JsonReader)правильный подход здесь?

Какой запрос на модификацию с TypeAdapterFactory мне следует использовать в моем случае?

fun getTrending(@Query("api_key") apiKey: String): Call<List<Gif>>
fun getTrending(@Query("api_key") apiKey: String): Call<Gif>
fun getTrending(@Query("api_key") apiKey: String): Call<GifSerialList>

Какой-нибудь совет по объединению содержимого функции json read ()?Пока что я получаю типичные исключения BEGIN_ARRAY или BEGIN_OBJECT, что бы я ни пытался.Моя неполная функция чтения () TypeAdapterFactory ниже:

override fun read(input: JsonReader): T {
                var jsonElement = elementAdapter.read(input)
                var jsonObject = jsonElement.asJsonObject
                val jsonArray = jsonObject.getAsJsonArray("data")
                for (item in jsonArray) {
                    Log.d(TAG, "item: $item")
                    jsonObject = item.asJsonObject
                }
                jsonElement = jsonObject
                return delegate.fromJsonTree(jsonElement)
            }

Как выбрать требуемые элементы POX json Gif и вернуть их вместе?Нужно ли мне создавать список элементов json здесь и затем возвращать?

...