如果对象类型不同,GSON 会抛出异常

GSON raises exception if object type is different

我正在使用以下方法将提要解析为 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 some time 在“数据”中提供“整数”而不是对象

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

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

您需要使用 List<Object> 为 java 或 List< 更改“数据”的数据类型Any> kotlin。可能你会摆脱异常。

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

但您需要在使用时将项目转换为适当的类型。

例如:

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

但是,如果你想在数据类型不同的时候设置"data"为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
}