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

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

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

是否有任何GSON API注释?

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

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

以下是我的代码:

 import static net.hugonardo.java.commons.text.StringUtils.normalizeSpace; import static net.hugonardo.java.commons.text.StringUtils.trimToNull; final class StringGsonTypeAdapter implements JsonDeserializer { 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主要通过实例字段的reflection来工作。 因此,如果你不打算转移到具有此function的jackson,我认为你不能有一般的方式来打电话给你的安装人员。 所以没有注释。

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

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

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