当前位置: 首页 > 面试题库 >

Gson反序列化JSON时可以使用setter吗?

郎河
2023-03-14
问题内容

使用Gson的fromJson方法时,可以使用某种给定类的set 方法吗?

我想这样做是因为对于String目标类的每个全局变量都会进行修剪。

为此有任何GSON API注释吗?

我知道GSON提供了编写自定义序列化器/反序列化器的功能,但我想知道是否还有另一种方法可以实现此目的。


问题答案:

我实施了JsonDeserializer<String>并在上注册了GsonBuilder。因此,对于收到的所有String字段,Gson将使用my
StringGsonTypeAdapter反序列化该值。

下面是我的代码:

import static net.hugonardo.java.commons.text.StringUtils.normalizeSpace;
import static net.hugonardo.java.commons.text.StringUtils.trimToNull;

final class StringGsonTypeAdapter implements JsonDeserializer<String> {

    private static final StringGsonTypeAdapter INSTANCE = new StringGsonTypeAdapter();

    static StringGsonTypeAdapter instance() {
        return INSTANCE;
    }

    @Override
    public String deserialize(JsonElement jsonElement, Type type, 
        JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
        return normalizeSpace(trimToNull(jsonElement.getAsString()));
    }
}

…以及我的GsonBuilder:

Gson gson = new GsonBuilder()
    .registerTypeAdapter(String.class, StringGsonTypeAdapter.instance())
    .create())


 类似资料:
  • 在使用Gson的fromJson方法时,是否有任何方法可以使用给定类的set方法? 我之所以这样做,是因为对目标类的每个

  • 当JSON字符串{“a”:1}被反序列化时,数字100应该添加到值1中。在jsonb中,这是通过setter方法实现的,但Gson忽略了setter方法。如何让Gson使用setter方法?或者,如果这不可能,2022年,Gson中的setter推荐的替代方案是什么?

  • 问题内容: 我在反序列化以下json数组时遇到麻烦(对不起,大小): 如果将其粘贴到json-viewer中,则会得到以下结构: 现在,包含具有坐标的数组的数组具有可变大小。所以我想在Java中,整个对象应该是一个数组,其中包含数组的集合,每个数组都包含一个。就像是 但是gson不接受这一点。我收到以下错误消息: 这似乎很奇怪,因为对我来说好像不像一个数组。但这可能使我感到困惑,或多或少地迷路了…

  • 问题内容: 我使用了很多不可变的集合,并且很好奇如何使用Gson反序列化它们。由于没有人回答,而且我自己找到了解决方案,因此我正在简化问题并提出自己的答案。 我有两个问题: 如何为所有人编写一个作品? 如何全部注册? 问题答案: 更新:有https://github.com/acebaggins/gson- serializers ,其中涵盖了许多番石榴集合: 如何编写适用于所有Immutable

  • 问题内容: 我在使用Gson解析JSON响应时遇到问题。 JSON字串: 我有这两个课程: 但是当使用Gson解析这个时我有一个异常。我知道这是因为响应数组的第一个元素不是对象,而是整数。 所以问题是,我能以某种方式解决它吗? 问题答案: 您必须编写一个 自定义反序列化器 。我会做这样的事情: 首先,您需要包括一个新的类,而不是已有的两个类: 然后,您需要一个自定义解串器,类似于以下内容: 然后,

  • 我试图使用GSON将一些Json反序列化为一个漂亮整洁的对象。现在,我已经设法让Json正确地映射到一些更明显的变量。然而,在尝试映射一些Json时,我发现: 在我来到之前,它一直映射得很好。我一辈子都想不出如何实现它。我认为主要的问题是它们不再是静态的类名,而是随机化的。因此,写这样的东西是完全不切实际的(也是不可能的): 我环顾了一下Stackoverflow,但答案似乎很复杂,很多答案都不太