谷歌的GSON是否使用构造函数?

Gui*_*ido 12 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);
}
Run Code Online (Sandbox Code Playgroud)

tha*_*guy 14

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

如果你必须在GSON中调用特定的构造函数,你可以实现一个自定义JsonDeserializer,就像这里已经提到的那样.

在像杰克逊的其他图书馆,你可以定义方法反序列化,而不是领域(如GSON ),它允许你替换缺少专门的构造函数调用.

  • `Jackson` 有一个注释 `@JsonCreator`,现在可以让你标记要用于序列化的构造函数。 (2认同)