如果对象类型不同,则GSON引发异常

ckocjqey  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(195)

我使用以下方法将提要解析为Java对象。

val gsonBuilder = GsonBuilder()
        val gson = gsonBuilder.create()
        var homeModel: DataModel?=null

        try {
            homeModel = gson.fromJson(response, DataModel::class.java)
        }catch (ex:java.lang.Exception){
        }

如果feed是相同的格式,这可以正常工作,但是某些对象的类型发生了变化,它会进入异常块。
例如,feed有时提供“integers”而不是Object中的“data”

@SerializedName("data")
@Expose
private List<MoreData> data = null;

我想知道如果类型不匹配,在GSON中是否有可能将特定数据设置为“null”。

falq053o

falq053o1#

你需要用List〈Object〉来改变你的数据类型“data”,或者用List〈Any〉来改变你的数据类型“data”,这样你就可以摆脱异常了。

@SerializedName("data")
@Expose
private List<Object> data = null;

但在使用时需要将项转换为适当的类型。
例如:

val item:Int = homeModel[i] as Int //as yourDesiredType

但是,如果要在数据类型不同时将“数据”设置为null,可以尝试:

val model = DataModel()
val json = Gson().toJson(model)
homeModel = Gson().fromJson(json, DataModel::class.java)
try {
        if(!homeModel.data.isNullOrEmpty()){
            homeModel.data.first() as String //as yourDesiredType
        }
} 
catch (ex:java.lang.Exception){
    homeModel.data = null
}

相关问题