Im ein wenig für meine Kotlin Klasse verwirrt nicht wie erwartet:Kotlin Datenklasse Gson Serialisierung Ausgabe
die Datenklasse zu überprüfen, aktualisieren Informationen verwendet:
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
}
auch ein util verwendet zu dekodieren Objektform 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();
}
}
, wenn ich es testen:
val json = "{\"force\"=\"1\"}"
val info = JsonUtil.fromJsonObject(json, UpdateInfo::class.java)
println(info)
println(info.force == 1)
println(info.isForceUpdate)
ich:
UpdateInfo(description=null, force=1, platform=null, title=null, url=null,versionCode=0)
true
false
Was ?? info.isForceUpdate = falsch ???
Dann habe ich versucht lateinit
oder by lazy{}
, immer noch nicht funktioniert. Also, was soll ich tun..Ich benutze info.force==1
direkt jetzt, aber ich möchte immer noch wissen, warum das passiert ist.
Überprüfen Sie, ob dies hilft: http://StackOverflow.com/questions/39962284/Gson-Deserialization-with-Kotlin-Initializer-Block-not-called – hotkey
Wenn Sie möchten, dass Ihr Konstruktor von der Serialisierungsbibliothek ordnungsgemäß aufgerufen wird (anstatt "Unsafe" zu verwenden, um es zu instanziieren), könnten Sie an [Moshi] interessiert sein (https://medium.com/square-corner-blog/kotlins-a-great-language-for-json-fcd6ef99256b), was in mancher Hinsicht als Nachfolger von Gson gesehen werden kann. –