[英]GSON : java.lang.IllegalStateException: Expected BEGIN_OBJECT but was 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()
它按預期工作。 但是當我將Car
的make
數據類型更改為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.