当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,我认为你不能有一般的方式来打电话给你的安装人员。 所以没有注释。
但
为了满足您的特定需求,您可以:
- 编写自己的自定义TypeAdapter或
- 创建一个构造函数,其中包含您要修剪的字符串并创建自定义InstanceCreator或
- 将您的JSON解析为JsonObject ,对字符串进行一些处理,然后使用该对象作为解析到您的类的源。
只要您发布一些代码或提供有关您的数据/ JSON的信息,我就可以为您提供更多提示。