将JSON类反序列化为不同名称的Java类

时间:2017-11-28 19:16:38

标签: java json gson

我之前的问题并没有真正得到任何结论,也许我没有问正确的事情,或者说它太详细了。

我现在的基本问题是,如何将具有一个类名的JSON对象反序列化为具有不同类名的Java对象?

例如,服务器发送/期望的JSON类是“18”(我对此没有控制权)。我的Java类不能是“18”,所以它是“_18”。

即使使用不同的命名策略,简单地执行新的Gson()。fromJson()也无济于事; _18对象始终为null。我已经读过有关类型适配器和不同注释的内容,但我仍然不清楚如何处理这个问题。似乎最明智的方法@SerializedName,显然不能用于类本身,只是字段成员。

如何将一个名为18的类的JSON对象反序列化为一个名为_18的Java类(或者,更好的是,如果可能的话,我可以给该类一个真名)?

示例JSON,请求:

"18": {
    "field1": "value1",
    "field2": "value2",
    "field3": "value3"
}

1 个答案:

答案 0 :(得分:2)

首先 - JSON没有类的概念 - 它是一个对象的字符串表示。 所以,你的例子只是一个格式错误的JSON。它必须像:

{"18":
 {
  "field1": "value1",
  "field2": "value2",
  "field3": "value3"
  }
}

这是有效的JSON对象,其字段为“18”,而另一个类依次为field1field2field3属性。

所以,如果服务器像你的show一样返回JSON字符串 - 要解析它,你必须用{}包围它,然后你的Java类将具有“18”的属性,因为你想为{{1}命名为Java注释。

请参阅下面的示例测试用例:

@SerializedName