【发布时间】:2020-10-31 11:28:06
【问题描述】:
在我的应用程序中,我使用套接字。来自套接字的收入消息是 jsons,我想将每个 json 映射到每个相应的对象。
例如我有 json
{ "er": { "i":"1001", "m":"message text" } }
与数据类匹配
data class Error(
val er: Er
)
data class Er(
val i: String,
val m: String
)
但我也有类似的json
{
"statusCode":200, "body":{
"au":{
"a": 44,
}
}
}
哪个是数据类
data class Authentication(
val body: Body,
val statusCode: Int
)
data class Body(
val au: Au
)
data class Au(
val a: Int
)
默认情况下,我知道我的 API 永远不会有相同类型的 jsons!
所以我尝试做类似的事情
try {
val thing = Gson().fromJson(mJson, Error::class.java)
// This json is Error type of object. Do something with it
catch(e: JsonSyntaxException) {
// This json is not Error object. Maybe its Authentication
// Proceed to check another object
}
但是我注意到没有发生异常,thing 是一个带有空字段的Error 对象。
是否有任何机制或库可以找到 json 映射到哪个对象?
【问题讨论】:
-
你能发一个示例 JSON 和相应的类吗?
-
你可以想象任何 json 和任何类......这必须是一个通用函数
-
您希望库自动找出以 JSON 编码的对象类型(无需在反序列化时提供所需的类型)?你怎么想象的?假设您有两个类
data class Class1(val str: String)data class Class2(val str: String)和{"str": "123"}作为 JSON。它应该如何反序列化?作为Class1或Class2的实例? -
或者您希望它对反序列化严格,并在提供的 JSON 与指定类型不匹配时抛出异常?
-
我已经编辑了这个问题,以防它现在更容易理解!
标签: json kotlin serialization gson