谷歌的GSON会使用构造函数吗?

时间:2016-11-05 17:59:05

标签: java json gson

在处理我们的项目时,我想知道一些事情。 Google的GSON API是否使用了您想要反序列化的JSON的构造函数?例如:

我有一个JSON字符串,我想将其转换为Employee对象。 Employee对象有一个构造函数,它对参数应用了一些检查(例如,它的ID是> 0)。我们正在使用下面的代码反序列化JSON。但是,在将JSON反序列化为Employee时,是否会调用此构造函数?

链接到GSON:https://github.com/google/gson

修改 因此,在尝试使用断点后,我发现构造函数未被调用。有人知道一种方法来调用它吗?

/**
 * The GSON class to help you create and de-serialize the JSON objects.
 */
Gson gson = new Gson();

/**
 * Convert JSON to an object.
 * @param json The JSON to convert.
 * @param cls The class to convert to.
 * @return The converted JSON to object.
 */
public Object jsonToObject(String json, Class<?> cls) {
    return gson.fromJson(json, cls);
}

1 个答案:

答案 0 :(得分:12)

GSON,Jackson或Java Persistence API(JPA)等库通常使用无参数(默认)构造来实例化对象并通过反射设置其字段。在较新版本的GSON中,您甚至不必再声明默认构造函数,请参阅here

如果您必须在GSON中调用特定构造函数,则可以实现自定义JsonDeserializer,就像已经提到的here一样。

在像Jackson这样的其他库中,您可以定义方法的反序列化,而不是字段(如GSON does),它允许您替换缺少的专用构造函数调用。