Поскольку вы получаете значение в виде строки, Gson будет анализировать его как строку «null», вы можете написать собственные десериализаторы, если хотите, чтобы значение поля было нулевым.
AnswerHelperObject
data class AnswerHelperObject(
var answer_id: Int,
var question_id: Int,
var value: String?
)
AnswerHelperObjectDeserializer
class AnswerHelperObjectDeserializer: JsonDeserializer<AnswerHelperObject>{
override fun deserialize(json: JsonElement, typeOfT: Type?, context: JsonDeserializationContext?): AnswerHelperObject {
val answerHelperObject = Gson().fromJson(json.asJsonObject, AnswerHelperObject::class.java)
if (answerHelperObject.value == "null") {
answerHelperObject.value = null
}
return answerHelperObject
}
}
Вы можете увидеть тестовые сценарии.
class AnswerHelperObjectTest {
@Test
fun answer_object_parse_as_null_string() {
val json = "{\"answer_id\":123,\n" +
"\"question_id\":4567,\n" +
"\"value\":\"null\"}"
val answerHelperObject = Gson().fromJson(json, AnswerHelperObject::class.java)
// value is parsed as string of value null
assertEquals(answerHelperObject.value, "null")
}
@Test
fun answer_object_parse_null() {
val json = "{\"answer_id\":123,\n" +
"\"question_id\":4567,\n" +
"\"value\":\"null\"}"
val gson = GsonBuilder()
.registerTypeAdapter(AnswerHelperObject::class.java, AnswerHelperObjectDeserializer())
.create()
val answerHelperObject = gson.fromJson(json, AnswerHelperObject::class.java)
// value is deserialized as null
assertEquals(answerHelperObject.value, null)
}
}