java - Google 的 GSON 是否使用构造函数?

标签 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);
}

最佳答案

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

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

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

关于java - Google 的 GSON 是否使用构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40441460/

相关文章:

android - 无法使用 Gson 从另一个 Activity 的共享首选项中删除数据

java - 在 Tomcat/Coyote 上更改反斜杠行为

java - 使用 gant 和 eclipse 构建项目

javascript - 当您不知道数组有多大时,如何获取 JSON 数组中的最后一个索引?

json - 如何在Java中使用Elasticsearch jsonBuilder()?

java - 如何让 GSON 将普通 String 属性视为 AtomicReference<String>?

java - Gson - 从 Json 解析为类型化的 ArrayList<T>

java - TestNg Eclipse 插件 - 开始测试时出现 NullPointer

java - GWT 和 ScriptEngineManager

javascript - 未捕获类型错误 : Cannot read property 'label' of undefined Morris. js