簡體   English   中英

Gson IllegalStateException預期為BEGIN_OBJECT,但當數據類型為CharSequence時為STRING

[英]Gson IllegalStateException Expected BEGIN_OBJECT but was STRING when data type is CharSequence

假設我有一個簡單的數據類

data class Car(var make: String)

和一個Json String

val json = "[{'make':'foo'}, {'make':'bar'}]"

當我使用Gson反序列化字符串時

val carList : MutableList<Car> = gson.fromJson(json, Array<Car>::class.java).toMutableList()

它按預期工作。 但是當我將Carmake數據類型更改為CharSequence

data class Car(var make: CharSequence)

並與GsonBuilder

val builder = GsonBuilder()
builder.registerTypeAdapter(CharSequence::class.java, object : InstanceCreator<CharSequence> {
    override fun createInstance(type: Type?): CharSequence {
        return String()
    }
})
gson = builder.create()

我收到com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 11 path $[0].make

已經在努力使其與CharSequence類型一起使用,任何建議都值得贊賞。

您必須創建一個適當的JsonDeserializer 不是InstanceCreator 例如:

builder.registerTypeAdapter(CharSequence::class.java, object : JsonDeserializer<CharSequence> {
    override fun deserialize(
        json: JsonElement?,
        typeOfT: Type?,
        context: JsonDeserializationContext?
    ): CharSequence = json?.asString ?: ""
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM