我可以设定 @SerializedName 到 this_field 所以当我使用 toJson() 它会正常使用的。然而,当我试图通过via阅读时 fromJson() 它将尝试使用的函数 thisField .
@SerializedName
this_field
toJson()
fromJson()
thisField
通常我会创建一个类似下面的序列化程序;然而,是否有内置的东西可以处理这个问题,或者是为每个类创建自定义反序列化程序的唯一方法?
班级
@Data @Builder @AllArgsConstructor public class A { @SerializedName("this_field") private Integer thisField; }
序列化程序类
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:的可选名称 反序列化时的字段
所以你可以用
@SerializedName(value="this_field", alternate={"thisField"}) private Integer thisField;
这将导致 this_field 在序列化期间使用。
这是我的地盘 如果可用,如果不可用,将使用 thisField 如果可以的话。
这是我的地盘