如果Gson序列化失败,如何跳过字段?

问题描述 投票:0回答:1

例如,服务器响应#1具有name对象:

     {
       "id":"vfa45f42", 
       "name": { 
                "firstName":"UserFirstName",
                "lastName":"UserLastName"
         }
    }

但是有时服务器响应#2具有用户其他对象的name字符串(这是因为服务器具有MongoDB,而在v1处为String,而在v2处为Object):

    {
        "id":"abfaf453", 
        "name":"OneSentenceUserName"
    }

所以,如果我用响应#2做出此:

val type = object : TypeToken<User>() {}.type
gson.fromJson(responseString, type)

where

data class User(val id:String, val name: Name)

data class Name(val firstName: String, val lastName: String)

错误是:

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line ...

如果是json上的name = null,我希望将其设为String

java android kotlin gson
1个回答
0
投票

不知道它是否可以直接帮助您,但是对于同一情况,我对Kotlinx.Serializartion库执行了以下操作:

将名称设为JsonElement类型

val name: JsonElement

然后创建自定义反序列化函数,如:

fun getName(): Name? =
    if (name is JsonObject) {
        // deserialize Name normally
    } else {
        // create Name by hand, only with 'name' property... 
    }

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.