【发布时间】:2021-03-21 00:01:55
【问题描述】:
我需要创建一个自定义的 Gson 反序列化器,当它被调用时会递归地进入对象并使用相同的概念反序列化它们
对于这个例子,让我们创建一个 JSON 对象:
{
"name": "Hello world!",
"foo": {
"bar": [12, 13, 14],
"type": "A"
}
}
然后是类,对于这个演示,有 2 个类 MainOutputClass 从反序列化器中调用,反序列化器应该从 JSON 中的 foo 对象反序列化子类
@ExposeAs() 用于告诉反序列化器采用哪个 JSON 对象。
public class MainOutputClass {
@ExposeAs("name")
private String nameString;
@ExposeAs("foo")
private SubClass subClass;
}
最后是递归演示的子类:
public class SubClass {
@ExposeAs("bar")
private List<Integer> bars;
@ExposeAs("type")
private String type;
}
我设法创建了一个反序列化器,可以完美地反序列化 Main 目标类,但我似乎无法让它适用于非原始子类。
我知道这是一个非常奇怪的问题,但我找不到任何资源来解决这个问题。 感谢您的帮助,感谢您抽出宝贵时间阅读本文。
【问题讨论】:
-
我不明白。 Gson 在设计上是递归的,因此您不需要创建任何自定义来支持它。它还支持使用 @SerializedName 注释映射自定义名称。你能提供一个你没有看到它这样做的具体例子吗?
-
这完全解决了我的问题,我不知道我怎么错过了@SerializedName注解。谢谢!
-
哈。我没有意识到那是您正在寻找的答案。 :-) 很高兴我能帮上忙!如果您想将我的答案标记为一些荣誉点,我会在下面抛出。