给 GSON 一个反序列化的类型,如果 json 不匹配,用另一个类型反序列化它(Android Kotlin)



我正在做一个应用程序,必须从多个api获得响应,它们服务于相同的工作,但它们是不同的。While on可以输出

{
"token": "AAAAABBBBB",
"expires": "unixtimestamp",
"username": "aaa",
"password": "bbb"
}

另一个可以遵循OAuth标准

{
"access_token": "AAAABBBBCCCC",
"refresh_token": "BBBBCCCCDDDD",
"expires_in": 3599
}

我已经有数据类的类型,知道什么api正在响应(所以我可以匹配数据类),我想知道是否有一个更好的替代方案,而不仅仅是一个when表达式。

谢谢。

我不太确定你在问什么。

如果你有两个不同的返回值,表示凭证,应该在下游进行不同的处理,但你仍然想返回其中任何一个,我建议使用密封类来建模数据。

sealed class Credentials {
data class BasicAuth(...): Credentials()
data class OAuth(...): Credentials()
}
suspend fun getCredentials(): Credentials {
val json: String = doStuff() // suspending function
return serializeOAuth(json) ?: serializeBasic(json) ?: // throw or null
private fun serializeOAuth(json: String): OAuth? = 
try { 
Gson().fromJson(json, OAuthCredentials::class)
} catch(...) { return null }
private fun serializeBasic(json: String): BasicAuth? = 
try { 
Gson().fromJson(json, BasicAuth::class)
} catch(...) { return null }
}

如果这对你没有帮助,也许你可以详细说明问题是什么。

相关内容

最新更新