編着:GSON或莫西:在POJO領域可以有2種類型,如何保存到任何領域
這裏是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個或多個字段(是這種情況下字段3可以是一個字符串或INT)
然後我想他們反序列化到任何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類上工作。
Btw。我用這個與Retrofit2這樣的:
val moshi = Moshi.Builder()
.add(MultitypeJsonAdapterAdapter())
.build()
return Retrofit.Builder().baseUrl(baseUrl)
.addConverterFactory(MoshiConverterFactory.create(moshi))
.client(httpClient.build())
.build()
做'field1'和'field2'有固定類型還是動態的? –
也在你的例子中,'json#1'不是一個有效的JSON。 –
@SerjLotutovici任何字段都可以是動態的。在這個pojo,它唯一的領域3。 – iori24