当Gson反序列化JSON时,是否可以使用setter?

Red*_*gle 10 java json gson deserialization

有没有办法在使用Gson fromJson方法时使用给定类的set 方法?

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

是否有任何GSON API注释?

我知道GSON提供了编写自定义序列化器/反序列化器的能力,但我想知道是否有另一种方法来实现这一点.

gia*_*olo 13

,没有.Gson主要通过实例字段的反射来工作.因此,如果你不打算转移到具有此功能的杰克逊,我认为你不能有一般的方式来打电话给你的安装人员.所以没有注释.

为了满足您的特定需求,您可以:

  1. 编写自己的自定义TypeAdapter
  2. 创建一个构造函数,其中包含您要修剪的字符串并创建自定义的InstanceCreator
  3. 将您的JSON解析为JsonObject,对字符串进行一些处理,然后使用该对象作为解析到您的类的源.

只要您发布一些代码或提供有关您的数据/ JSON的信息,我就可以为您提供更多提示.


hug*_*rdo 4

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

下面是我的代码:

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()));
    }
}
Run Code Online (Sandbox Code Playgroud)

...和我的 GsonBuilder:

Gson gson = new GsonBuilder()
    .registerTypeAdapter(String.class, StringGsonTypeAdapter.instance())
    .create())
Run Code Online (Sandbox Code Playgroud)