是否有与@SerializedName注解等效的Gson @DeserializedName?

uwopmtnx  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(202)

我可以将@SerializedName设置为this_field,这样当我使用toJson()函数时,它会正确地使用它。但是,当我试图通过fromJson()函数读取它时,它会尝试使用thisField
通常我会创建一个如下所示的序列化程序;但是,是否有内置的东西可以处理这个问题,或者这是为每个类创建自定义反序列化程序的唯一方法?
A类

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

ADerializer类别

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();
    }
}
ogq8wdun

ogq8wdun1#

doc
public abstract String[]替代返回值:反序列化字段时字段的备用名称
因此您可以使用

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

这将导致在序列化期间使用this_field
在反序列化过程中,如果可用,则使用this_field;如果不可用,则使用thisField(如果可用)。

相关问题