3

編集:

これが私が持っているjson文字列です:

json#1
{
    [
        {
            field1 : ""
            field2 : 0
            field3 : "Amount not fixed" or field : 250 // this field can be string or int
        },
        {
            field1 : ""
            field2 : 0
            field3 : "Amount not fixed" or field : 250 // this field can be string or int
        }

    ]
}

json#2
{
    field1 : ""
    field2 : 0
    field3 : "Amount not fixed" or field : 250 // this field can be string or int
}

または、サーバーからの任意の json 文字列を使用できます。ここでのポイントは、動的な値を持つ可能性のある 1 つ以上のフィールドが存在する可能性があることです (この場合、field3 は文字列または整数にすることができます)。

次に、それらを任意の POJO にデシリアライズしたい

class Temp1 {
    // field1 here
    // field2 here

    @SerializedName("field3")
    val field3Int: Int? = null

    @SerializedName("field3")
    val field3String: String? = null

}

サーバーから送信された値が の場合、値Intを に設定したいということですfield3Int。の場合は、Stringに設定しfield3Stringます。

動的な値を持つ可能性があるこの種のフィールドを持つ他の POJO が存在する可能性があります。

Serj の回答に感謝しますが、実際の状況を示すために質問を編集した後も、TypeAdapter クラスで機能させることはできません。

ところで。これを Retrofit2 で次のように使用します。

val moshi = Moshi.Builder()
                    .add(MultitypeJsonAdapterAdapter())
                    .build()
            return Retrofit.Builder().baseUrl(baseUrl)

                    .addConverterFactory(MoshiConverterFactory.create(moshi))
                    .client(httpClient.build())
                    .build()
4

2 に答える 2