递归自定义 Gson 反序列化器

Recursive custom Gson deserializer

我需要创建一个自定义 Gson 反序列化器,当递归调用它时,它将进入对象并使用相同的概念反序列化它们

对于这个例子,让我们创建一个 JSON 对象:

{
  "name": "Hello world!",
  "foo": {
    "bar": [12, 13, 14],
    "type": "A"
  }
}

然后 classes,对于这个演示有 2 classes MainOutputClass 从反序列化器调用,反序列化器应该从 foo 对象反序列化 SubClass在 JSON

至于 @ExposeAs() 这是为了告诉反序列化器要获取哪个 JSON 对象。

public class MainOutputClass {

    @ExposeAs("name")
    private String nameString;

    @ExposeAs("foo")
    private SubClass subClass;

}

最后subclass进行递归演示:

public class SubClass {

    @ExposeAs("bar")
    private List<Integer> bars;

    @ExposeAs("type")
    private String type;

}

我设法创建了一个反序列化器,可以完美地反序列化主要目标 class,但我似乎无法做到,因此它可以在非原始子目标上工作classes.

我知道这是一个非常奇怪的问题,但我找不到任何资源来解决这个问题。 感谢您的帮助,感谢您花时间阅读本文。

正如 Atmas 所指出的,我需要做的就是在字段中添加 @SerializedName 注释。

OP 正在寻找 @SerializedName 注释,它用于翻译名称,因为它应该存在于 JSON 格式与字段名称在 Java.

为了后代,如果你使用 Jackson 解析器,你可以使用 @JsonProperty 达到同样的效果。

When is the @JsonProperty property used and what is it used for?