【发布时间】:2021-02-09 11:31:53
【问题描述】:
在使用 gson 反序列化后,我遇到了一个我不明白的错误。 我的用例要复杂得多,但我在下面创建了这个测试,它显示了我看到的行为。 问题是反序列化后计算的瞬态值 (allObjs) 为空。单元测试在最后一个断言上失败。 显然,@Transient 在反序列化后阻止了 allObjs 的正确初始化。
这是预期的行为吗?我可以做些什么来使该领域以这种方式工作吗?
如果不是,那么我必须将所有瞬态字段转换为 getThemAll() 之类的函数,这确实有效。
我希望有任何见解。
问候,罗伯
class CoupleDeserializeTest {
data class Couple( val objA: String, val objB: String){
@Transient
val allObjs: List<String> = listOf(objA, objB)
fun getThemAll() = listOf(objA, objB)
}
@Test
fun testDe_SerializeCouple() {
val couple = Couple("my", "text")
// This succeeds
Assert.assertNotNull(couple.allObjs)
val gson = Gson()
val json = gson.toJson(couple)
// This succeeds
Assert.assertEquals("{\"objA\":\"my\",\"objB\":\"text\"}", json)
val coupleDeserialized = gson.fromJson<Couple>(json, Couple::class.java)
// This succeeds
Assert.assertNotNull(coupleDeserialized.getThemAll())
// This fails
Assert.assertNotNull(coupleDeserialized.allObjs)
}
}
【问题讨论】: