Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 谷歌';GSON是否使用构造函数?_Java_Json_Gson - Fatal编程技术网

Java 谷歌';GSON是否使用构造函数?

Java 谷歌';GSON是否使用构造函数?,java,json,gson,Java,Json,Gson,在做我们的项目时,我在想些什么。Google的GSON API是否使用您想要反序列化的JSON的构造函数?例如: 我有一个JSON字符串,我想把它转换成Employee对象。Employee对象有一个构造函数,它对参数应用一些检查(例如,它的ID是否大于0)。我们使用下面的代码来反序列化JSON。但在将JSON反序列化到Employee时是否调用了此构造函数 链接到GSON: 编辑: 所以在尝试断点之后,我发现构造函数没有被调用。有人知道怎么叫它吗 /** * The GSON class t

在做我们的项目时,我在想些什么。Google的GSON API是否使用您想要反序列化的JSON的构造函数?例如:

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

链接到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);
}
/**
*GSON类帮助您创建和反序列化JSON对象。
*/
Gson Gson=新的Gson();
/**
*将JSON转换为对象。
*@param json要转换的json。
*@param cls要转换为的类。
*@将转换后的JSON返回给对象。
*/
公共对象jsonToObject(字符串json,类cls){
返回gson.fromJson(json,cls);
}

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

如果必须在GSON中调用特定的构造函数,可以实现自定义的
JsonDeserializer
,就像前面提到的那样


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

在构造函数中放置断点并调试代码,否?@RC。是的,你是对的,我只是测试了它,没有调用构造函数。我假设它使用空构造函数来实例化对象,读入字段将直接使用反射进行设置。是的,我发现了这一点@EpicPandaForce正如我在回答中所说,您需要实现一个定制的
JsonDeserializer
,并从那里调用构造函数。GSON还不支持调用构造函数。
Jackson
有一个注释
@JsonCreator
,现在可以将构造函数标记为用于序列化。