Gson ignore null when deserializing object

筅森魡賤 提交于 2020-01-29 13:10:12

问题


I want to deserialize a json string that containts a null value in Java. I want to deserialize the object to a Properties object. The json string is something like:

{"prop1":null, "propr2":"fancy value"}

When I deserialize using

String json = //
new Gson().fromJson(json, Properties.class);

I get a null pointer exception because of the Hastable that into the Properties object. How can I instruct Gson to ignore deserialization of null values?


回答1:


We have this solution:

1. All of your data classes need to extends abstract class

abstract class PoJoClass

2. Create this safe deserializer to delete nulls from JSON

class SafeDeserializer<T : PoJoClass>(private val gson: Gson) :JsonDeserializer<T> {
    override fun deserialize(json: JsonElement?, typeOfT: Type?, context: JsonDeserializationContext?): T {

        val jsonObject = json as JsonObject
        removeNullsFromJson(jsonObject)
        return gson.fromJson(jsonObject, typeOfT)
    }

    private fun removeNullsFromJson(jsonObject: JsonObject) {
        val iterator = jsonObject.keySet().iterator()

        while (iterator.hasNext()) {
            val key = iterator.next()
            when(val json = jsonObject[key]){
                is JsonObject -> removeNullsFromJson(json)
                is JsonNull -> iterator.remove()
            }
        }
    }
}

3. And register it in your GSON instance

val gson = Gson().newBuilder()
                .registerTypeHierarchyAdapter(PoJoClass::class.java, SafeDeserializer<PoJoClass>(Gson()))
                .create()



回答2:


See http://sites.google.com/site/gson/gson-user-guide#TOC-Null-Object-Support:

Gson gson = new GsonBuilder().serializeNulls().create();



来源:https://stackoverflow.com/questions/33301036/gson-ignore-null-when-deserializing-object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!