代码之家  ›  专栏  ›  技术社区  ›  Zera42

是否存在与@SerializedName注释等效的Gson@DeserializedName?

  •  0
  • Zera42  · 技术社区  · 2 年前

    我可以设定 @SerializedName this_field 所以当我使用 toJson() 它会正常使用的。然而,当我试图通过via阅读时 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();
        }
    }
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   Panagiotis Bougioukos    2 年前

    根据 doc

    public abstract String[]alternate Returns:的可选名称 反序列化时的字段

    所以你可以用

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

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

    这是我的地盘 如果可用,如果不可用,将使用 thisField 如果可以的话。