Google的GSON使用构造函数吗?

2022-09-03 01:33:40

在从事我们的项目时,我想知道一些事情。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

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

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

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


答案 2