是否有 Gson @DeserializedName 等同于 @SerializedName 注释?

Is there a Gson @DeserializedName equivalent to the @SerializedName annotation?

我可以将 @SerializedName 设置为 this_field,所以当我使用 toJson() 函数时,它会正确使用它。但是,当我尝试通过 fromJson() 函数读取它时,它将尝试使用 thisField.

通常我会创建一个如下所示的序列化程序;然而,是否有内置的东西可以处理这个问题,或者是为每个 class?

创建自定义反序列化器的唯一方法

一个class

@Data
@Builder
@AllArgsConstructor
public class A {
    @SerializedName("this_field")
    private Integer thisField;
}

解串器class

public class ADeserializer implements JsonDeserializer<A> {
    @Override
    public Additional deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
        JsonObject obj = jsonElement.getAsJsonObject();
        return A.builder()
                .thisField(obj.get("this_field").isJsonNull() ? null : obj.get("this_field").getAsJsonObject)
                .build();
    }
}

根据 doc

public abstract String[] alternate Returns: the alternative names of the field when it is deserialized

所以你可以使用

@SerializedName(value="this_field", alternate={"thisField"}) 
private Integer thisField;

这将导致 this_field 在序列化期间被使用。

在反序列化过程中,如果可用,将使用 this_field,如果不可用,它将使用 thisField