Java 谷歌';GSON是否使用构造函数?
在做我们的项目时,我在想些什么。Google的GSON API是否使用您想要反序列化的JSON的构造函数?例如: 我有一个JSON字符串,我想把它转换成Employee对象。Employee对象有一个构造函数,它对参数应用一些检查(例如,它的ID是否大于0)。我们使用下面的代码来反序列化JSON。但在将JSON反序列化到Employee时是否调用了此构造函数 链接到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
/**
* 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
,现在可以将构造函数标记为用于序列化。