ÉDITÉE:Gson ou Moshi: champ POJO pourrait avoir 2 types, comment enregistrer dans l'un des champs
Voici la chaîne JSON que j'ai:
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
}
ou il pourrait tout JSON chaîne du serveur. Le point ici est il pourrait y avoir 1 ou plusieurs champs qui peuvent avoir une valeur dynamique (est-ce field3 cas peut être une chaîne ou int)
Je veux les désérialiser à tout POJO
class Temp1 {
// field1 here
// field2 here
@SerializedName("field3")
val field3Int: Int? = null
@SerializedName("field3")
val field3String: String? = null
}
Il signifie que si la valeur envoyée par le serveur est Int
, je souhaite définir la valeur sur field3Int
. S'il s'agit d'un String
, définissez sur field3String
.
Il pourrait y avoir d'autres POJO qui auront ce type de champs qui peuvent avoir une valeur dynamique. Merci à Serj pour sa réponse, mais je ne peux toujours pas le faire fonctionner sur la classe TypeAdapter après avoir édité la question pour montrer ma situation réelle.
Btw. Je l'utilise avec cette Retrofit2 comme ceci:
val moshi = Moshi.Builder()
.add(MultitypeJsonAdapterAdapter())
.build()
return Retrofit.Builder().baseUrl(baseUrl)
.addConverterFactory(MoshiConverterFactory.create(moshi))
.client(httpClient.build())
.build()
est-ce que 'field1' et' field2' ont des types fixes ou sont-ils aussi dynamiques? –
également dans votre exemple, 'json # 1' n'est pas un JSON valide. –
@SerjLotutovici n'importe quel champ pourrait être dynamique. dans ce pojo, son seul champ3. – iori24