Im un peu confus pour ma classe Kotlin ne fonctionne pas comme prévu:données Kotlin classe Gson question de sérialisation
la classe de données utilisée pour vérifier mettre à jour les informations:
data class UpdateInfo constructor(//kotlin class
val description: String,
val force: Int,
val platform: String,
val title: String,
val url: String,
@SerializedName("version")
val versionCode: Int = 0
) : Serializable {
val isForceUpdate = force == 1
}
également util utilisé pour décoder la forme d'objet JSON:
public class JsonUtil {//java class
private static final Gson gson;
static {
BooleanAdapter booleanAdapter = new BooleanAdapter();
gson = new GsonBuilder()
.serializeNulls()
.disableHtmlEscaping()
.setLenient()
.registerTypeAdapter(Boolean.class, booleanAdapter)
.registerTypeAdapter(boolean.class, booleanAdapter)
.create();
}
}
quand je le tester:
val json = "{\"force\"=\"1\"}"
val info = JsonUtil.fromJsonObject(json, UpdateInfo::class.java)
println(info)
println(info.force == 1)
println(info.isForceUpdate)
je reçois:
UpdateInfo(description=null, force=1, platform=null, title=null, url=null,versionCode=0)
true
false
Quoi ?? info.isForceUpdate = faux ???
Ensuite, j'ai essayé lateinit
ou by lazy{}
, ne fonctionne toujours pas. Alors, que dois-je faire .. J'utilise info.force==1
directement maintenant, mais je veux toujours savoir pourquoi cela s'est produit.
S'il vous plaît vérifiez si cela aide: http://stackoverflow.com/questions/39962284/gson-deserialization-with-kotlin-initializer-block-not-called – hotkey
Si vous voulez que votre constructeur soit appelé correctement par la bibliothèque de sérialisation (Au lieu d'utiliser 'Unsafe' pour l'instancier), vous pourriez être intéressé par [Moshi] (https://medium.com/square-corner-blog/kotlins-a-great-language-for-json-fcd6ef99256b), ce qui, à certains égards, peut être considéré comme un successeur de Gson. –