編集:
これが私が持っている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()